数据结构:希尔排序
原创
©著作权归作者所有:来自51CTO博客作者顾道长生的原创作品,请联系作者获取转载授权,否则将追究法律责任
基本思想:
将待排序列划分为若干组 将待排序列划分为若干组,在每一组内进行插
入排序,以使整个序列基本有序以使整个序列基本有序, 然后再对整
个序列进行插入排序。
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;
}
运行效果: