Сортировка Шелла, поясните код - C (СИ)
Формулировка задачи:
Кто-нибудь может построчно объяснить, что происходит в этой функции. Я немного разобрался, но многие моменты мне не понятны.
Передается тут массив a[], его размер n и 2 указателя для вывода проги *p *s.
Как работает сортировка шелла, я рассказать могу, а вот с кодом тяжело.
Просьба объяснить построчно, а не скидывать ссылку на ресурсы, в которых идет объяснение 1-2ух строк.
void shella(int n,int a[],int *p,int *s)
{ int i=0,j,x,m,k,t=5;
int h[]={9,5,3,2,1};
for (m=0;m<t;m++)
{
k=h[m];
for (i=k;i<n;i++)
{
x=a[i];
j=i-k;
(*s)++;
while ((x<a[j])&&(j>=0))
{
a[j+k]=a[j];
j=j-k;
(*s)++;
(*p)++;
}
if ((j+k)!=i)
{
a[j+k]=x;
(*p)++;
}
}
}
}Решение задачи: «Сортировка Шелла, поясните код»
textual
Листинг программы
if ((j+k)!=i)