希尔排序(Shell Sort)是直接插入排序算法的一种。是法因 D.L.Shell 于 1959 年提出而得名的算法。直接插入排序通常会在基本有序时,效率比较高。再有就是在待排序的记录比较少时,效率也会比较高。
它通过比较一定增量(位置间隔)中的元素大小来进行排序,每次比较所用的增量随着算法的进行而减小,直到增量为一时进行最后一次顺序排序。
ShellSort.c
#include <stdio.h>
#define n 12
void ShellSort(int *a,int len)
{
int i,j,rep;
int gap=(len-1)/2; //gap为增量
while(gap!=0)
{
for(i=0;i<len;i++)
{
rep = a[i];
j=i-gap;
while(j>=0 && a[j]>rep)//判断同一模块中的后值是>否比前值大
{
a[j+gap]=a[j];
j -= gap; //跳出while循环
}
a[j+gap] = rep; //交换数据
}
gap /=2; //增量缩减一半
}
}
int main(int argc,char *argv[])
{
int arr[n]={90,80,70,60,50,40,30,20,10,15,25,35};
ShellSort(arr,n);
for(int i=0;i<n;i++)
printf("%2d ",arr[i]);
printf("\n");
return 0;
}