基本思想:
将待排序列划分为若干组 将待排序列划分为若干组,在每一组内进行插
入排序,以使整个序列基本有序以使整个序列基本有序, 然后再对整
个序列进行插入排序。

ShellSort.c

#include <stdio.h>


void println(int *array,int len)
{
int i=0;

for(i=0; i<len; i++)
{
printf("%d ",array[i]);
}

printf("\n");
}

void ShellSort(int *array,int len)
{
int i = 0;
int j = 0;
int k = -1;
int temp = -1;
int gap = len;
/*
for(i=1;i<len;i++)//插入排序算法
{
k = i;
temp = array[k];

for(j=i-1;(j>=0)&&(array[j]>temp);j--)
{
array[j+1] = array[j];
k = j;
}

array[k] = temp;
}
*/
do
{
gap = gap/3+1;

for(i = gap; i<len; i+=gap)
{
k = i;
temp = array[k];

for(j=i-gap; (j>=0)&&(array[j]>temp); j-=gap)
{
array[j+gap] = array[j];
k = j;
}

array[k] = temp;
}
}while(gap>1);
}

int main()
{
int array[] = {21,25,49,25,16,8};
int len = sizeof(array)/sizeof(*array);

println(array,len);

ShellSort(array,len);

println(array,len);

return 0;
}

运行效果:

数据结构:希尔排序_#include