希尔排序就是在插入排序的基础上将排序数列进行某个增量的分组然后在分组下进行插入排序,直到增量为1的时候,此时由于经过多次分组的插入排序,基本上顺序已经有序,可交换的数据很少,执行效率很高。
#include <stdio.h>
void shellsort(int *arr, int n)
{
int i;
int j;
int temp;
int increment = n-1;
do
{
increment = increment/3 + 1; //设置分组分量
for (i = increment; i < n; i++) //以分量为单位进行插入排序
{
if (arr[i] < arr[i-increment])
{
temp = arr[i]; //哨兵
for (j = i - increment; j >= 0 && arr[j] > temp; j -= increment)
{
arr[j+increment] = arr[j];
}
arr[j+increment] = temp;
}
}
}
while(increment > 1);
}