C语言基本排序算法之shell排序实例
本文实例讲述了C语言基本排序算法之shell排序。分享给大家供大家参考,具体如下:
shell排序是对直接插入方法的改进方法.
/*-------------------------------------------------------------------------------------
Shell_sort.h
shell排序是对直接插入方法的改进,它并不是对相邻元素进行比较,而是对一定间隔的元素比较.
选择增量序列的几种方法:(为方便,本例采用第一种增量序列)
1.h[1]=size,h[k]=h[k-1]/2.
最坏运行时间为O(N^2).
最坏情形:数组长度为2^n,数组的偶数位置上同是一个数,奇数位置上也同是一个数,
且比偶数位置的小。此时到最后一次遍历前shell排序实际上什么也没做。
最后一次遍历相当于直接插入方法。
2.Hibbard增量序列:h=1,3,7,,2^k-1
这个的区别于上的主要的特点是相邻增量没有公因子
最坏运行时间为O(n^{1.5});
3.Sedgewick增量序列:{1,5,19,41,109,}
-------------------------------------------------------------------------------------*/
#ifndefSHELL_SORT_H
#defineSHELL_SORT_H
#include"typedef.h"
voidShell_sort(T*a,intn)
{
for(intgap=n;gap>0;gap=gap/2)
{
for(inti=0;i!=n;++i)
{
Ttemp=a[i];
intj=i-gap;
for(;j>=0&&a[j]>temp;j=j-gap)
a[j+gap]=a[j];
a[j+gap]=temp;
}
}
}
#endif
希望本文所述对大家C语言程序设计有所帮助。