Вставка Сортировка не сортировка первого элемента?

Моя реализация сортировки вставкой, кажется, работает за исключением сортировки самого первого элемента. У меня есть небольшой тестовый пример. Может кто-нибудь сказать мне, что не так с моим алгоритмом?

#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;
}

2

Решение

Первый раз 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(j>=0 && S[j] > key)

Ссылка на код

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]