решил реализовать ее так как я ее понимаю, не читая ацкие и непонятные чужие примеры. В итоге сортирует не всегда верно. Основной вопрос: Каждая стадия сортировки списка из N элементов должна проходить в 1 проход или несколько? Если в несколько, то как определить количество таких проходов? У меня, к примеру, проходит 1 раз с приращением 5, 1 раз с приращением 3, 1 раз с приращением 2 и 1 раз с приращением 1. Этого видимо оказывается недостаточно.
#include <stdio.h>
void sort_shell(int m[], int k)
{
int i = k;
int a,n,buf;
while(i!=1)
{
i = (i/2)+(i%2);
printf("while again %d\n",i);
for(a=0;a<i;a++)
{
printf(" pervie prohodi:%d\n",m[a]);
n=a;
while(n<=k-1-i)
{
printf(" %d vtorie prohodi: %d\n",n,m[n]);
if(m[n]>m[n+i])
{
printf(" delaem zamenu %d na %d\n",m[n],m[n+i]);
buf=m[n];
m[n]=m[n+i];
m[n+i]=buf;
}
n=n+i;
}
}
}
}
int main() {
int mass[8]={89,15,32,18,76,82,34,63,};
int size=sizeof(mass)/sizeof(*mass);
int i;
for(i=0; i<size; i++)
printf("До сортировки %d: %d \n",i, mass);
sort_shell(mass, size);
for(i=0; i<size; i++)
{
printf("После сортировки: %d \n", mass);
}
}