希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
c语言的实现如下:
#include <stdio.h>
//打印数组
void display(int array[],int size){
printf("the array is:");
int i;
for(i=0;i<size;i++){
printf("%d ",array[i]);
}
printf("\n");
}
void sort(int array[],int size){
int i,incr,temp;
//初始时,增量为size/2
incr = size/2;
//最终的增量为1
while(incr>=1){
for(i=0;(i+incr)<size;i++){
//如果array[i]大于array[i+incr],则交换2个数
if(array[i] > array[i+incr]){
temp = array[i];
array[i] = array[i+incr];
array[i+incr] = temp;
}
}
//增量--
incr--;
display(array,size);
}
}
int main(void){
int array[10]={34,45,1,39,21,68,65,100,4,51};
display(array,10);
//希尔排序函数
sort(array,10);
return 0;
}