Я должен создать код сортировки Shell с пробелами O (N ^ 3/2) и O (N ^ 4/3), не уменьшая его до 1, как программа делает это сейчас. Вот что я на самом деле получил:
using namespace std;
int main()
{
int N;
cout << "Amount of numbers: ";
cin >> N;
int d[N],h,i,j,x;
srand((unsigned)time(NULL));
for(i = 0; i < N; i++) d[i] = rand() % 100;
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
for(h = 1; h < N; h = 2^h - 1 );
//h = N/2;
//if(!h) h++;
while(h)
{
for(j = N - h - 1; j >= 0; j--)
{
x = d[j];
i = j + h;
while((i < N) && (x > d[i]))
{
d[i - h] = d[i];
i += h;
}
d[i - h] = x;
}
h /= 3;
}
cout << "After sort :\n\n";
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
return 0;
}
Задача ещё не решена.
Других решений пока нет …