#include <stdio.h>
#include <stdlib.h>
void GroupInsertSort(int *arr,int span,int len);
void HillSort(int *arr,int len);
int main (int argc,char *argv[])
{
int arr[]={44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
int len=sizeof(arr)/sizeof(int);
int yy; for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
HillSort(arr,len);
for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
return 0;
}
void GroupInsertSort(int *arr,int span,int len)
{
int ii;
int jj;
int temp;
for (ii = span; ii < len;ii += span)
{
temp = arr[ii];
for (jj = ii - span;jj >= 0;jj -= span)
{
if ( temp > arr[jj] ) break;
arr[jj + span] = arr[jj];
}
arr[jj + span] = temp;
}
}
void HillSort(int *arr,int len)
{
int span = len/2;
while ((span /=2) != 0)
{
for (int ii = 0; ii < span;ii++)
{
GroupInsertSort(arr+ii,span,len);
int yy; for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
}
}
}