希爾排序是 在 直接插入排序基礎之上做出的改進;
將要進行排序的序列按固定增量分成若干組,等距離者在同一組中,然後再在組中進行直接插入排序
#include <stdio.h>
void insort (int s[],int n)
{
int i,j,d;
while(d >= 1)
{
for(i = d+1;i<=n;i++)
{
s[0] = s[i];
j = i-d;
while ((j>0) && (s[0] <s[j]))
{
s[j+d]= s[j];
j= j-d;
}
s[j+d] = s[0];
}
d = d/2;
}
}
void main()
{
int a[11];
int i;
printf("請輸入 10 個數據:");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("原始順序是: ");
for (i=0;i<10;i++)
printf("%3d",a[i]);
insort(a,10);//調用 自定義函數 insort()
printf("\n插入數據排序後的順序是:");
for (i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}