随便找了一张百度百科的希尔排序的词条图片:
该图片很好的说明了希尔排序的排序原理过程,根据该原理可以写出以下代码:
#include<stdio.h>
void sort(int * array,int length)
{
int i;
int j;
int k;
for(i=length/2;i>0;i=i/2)
{
for(j=i;j<length;j++)
{
int tmp=array[j];
for(k=j-i;tmp<array[k]&&k>=0;k=k-i)
{
array[k+i]=array[k];
}
array[k+i]=tmp;
}
}
}
int main(int argc, char const *argv[])
{
int array[]={49,38,65,97,76,13,27,49,55,04};
sort(array,10);
int i;
for(i=0;i<10;i++)
{
printf("%d\t",array[i]);
}
printf("\n");
return 0;
}
运行结果:
//希尔排序:是一种特殊插入排序,根据等长度比较对应的元素值
//时间复杂: 最坏情况下需要比较O(n^1.5)次;