希爾排序:設定一個元素間隔增量gap,将序列按照間隔數gap從第一個元素開始依次分成若幹個子序列,在子序列中運用排序方法(如冒泡排序法),然後縮小增量gap重新将整個序列按照新的間隔數gap進行操作,再對每個子序列進行排序,直到間隔數為1為止。
如何選取gap值:經驗表示gap取值為序列長度的一半,後一趟排序的gap取值為前一趟gap取值的一半即可。
例如序列“5,30,7,9,20,10”操作步驟如下:
代碼如下:
#include<stdio.h>
void ShellSort(int a[],int n)
{
int i,j,temp;
int flag,gap=n;
while(gap>)
{
gap=gap/; //每次減半
flag=;
while(flag)
{
flag=;
for(i=;i<n-gap;i++)
{
j=i+gap;
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
flag=;
}
}
}
}
}
void main()
{
int a[],i;
printf("please input 10 numbers:\n");
for(i=;i<;i++)
scanf("%d",&a[i]);
printf("The array is:\n");
for(i=;i<;i++)
printf("%-4d",a[i]);
ShellSort(a,);
printf("\nAfter sort the array is:\n");
for(i=;i<;i++)
printf("%-4d",a[i]);
printf("\n");
}