2

除了对第一个元素进行排序外,我的插入排序实现似乎正在工作。我这里有一个小测试用例。谁能告诉我我的算法有什么问题?

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;



void Insert(int *S, int k)
{
        int key = S[k];
        int j = k-1;
        while(j>0 && S[j] > key)
        {
                S[j+1] = S[j];
                j--;
        }

        S[j+1] = key;
}


void Insertionsort(int S[], int n)
{
        if(n>1)
                Insertionsort(S,n-1);
        Insert(S,n);

}

int main()
{
        srand ( time(NULL) );
        int S1_8[8];
        for(int i=0; i<8; i++)
                S1_8[i] = rand()%100;

        Insertionsort(S1_8,8);

        for(int i=0; i<8; i++)
        {
                cout << S1_8[i] << endl;
        }

        return 0;
}
4

1 回答 1

5

第一次Insert调用,就通过了 int key = S[8];

S[8]不在数组范围内

做那个

void Insertionsort(int S[], int n)
{
        if(n>1)
                Insertionsort(S,n-1);
        Insert(S,n-1);

}

此外,在您的 while 条件下,它必须是

while(j>=0 && S[j] > key)

链接到代码

于 2012-10-17T08:11:31.780 回答