希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.
希尔排序的基本思想就是:将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样的操作可使需要排序的数列基本有序,最后再使用一次直接插入排序。
在希尔排序中首先要解决的是怎样划分序列,对于子序列的构成不是简单地分段,而是采取将相隔某个增量的数据组成一个序列。一般选择增量的规则是:取上一个增量的一半作为此次子序列划分的增量,一般初始值元素的总数量。
/*
*希尔排序
数组,长度
*/
void shell_sort(int *arr,int length)
{
int temp;
int j;
for(int d = (length/3) + 1;d >= 1;d =d/2)
{
for(int i = d;i < length; ++i)
{
temp=arr[i];
for(j = i-d; j >= 0 && temp < arr[j]; j = j-d)
{
arr[j+d]= arr[j];
}
arr[j+d] = temp;
}
}
}