一、优缺点
希尔排序的时间复杂度与其增量序列有关,这涉及到数学上尚未解决的难题。迄今为止,还没有人找到最好的增量序列。其时间复杂度为O(n^s){s, 1<s<2},其没有快速排序O(nlgn)快,因此对于中等大小规模表现良好,对于规模非常大的数据排序不是最优选择,但是比O(n^2)复杂度的算法快得多。提倡:几乎任何排序工作在开始时都可以使用希尔排序,若在运行中证明其不够快,可改成快序排序这样的高级的排序算法。
二、算法实现
其代码实现如下:
int shell_sort(int *array, int max)
{
int d = 0;
d = max>>1;
while(d > 0)
{
shell_insert(array, d, max);
inc >>= 1;
}
return 0;
}
void shell_insert(int *array, int d, int max)
{
int i=0, j=0, k=0;
for(i=1; i<=d; i++)
{
for(j=i+d; j<=max; j+=d)
{
k = j-d;
if(array[k] > array[k+d])
{
array[0] = array[k+d];
do
{
array[k+d] = array[k];
k -= d;
}while(k>0 && array[k]>array[0]);
array[k+d] = array[0];
}
}
}
}
三、函数调用void print(int *array, int max)
{
int idx = 0;
for(idx=1; idx<=max; idx++)
{
fprintf(stdout, "array[%d] = %d\n", idx, array[idx]);
}
}
int main(int argc, const char *argv[])
{
int max = ARRAY_NUM - 1;
int array[ARRAY_NUM] = {-1, -21, 25, -72, 20, -29, 4, 13, 2, 1, -30};
shell_sort(array, max);
print(array, max);
return 0;
}
分享到:
相关推荐
C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序
算法导论 源代码 C语言实现
算法导论C语言版本。下载后绝对不会后悔。嗯。谢谢
【排序算法】希尔排序(C语言)
C语言实现SHELL排序算法!C语言实现SHELL排序算法!
快速排序算法, 希尔排序算法. 排序算法的介绍. C语言实现.
数据结构 C语言 内部排序 希尔排序.本程序用c语言实现希尔排序的算法
C语言版的希尔排序算法,可以有按照升序、降序两种方式进行排序
C语言实现希尔排序算法,希望对大家有帮助!
算法导论 C语言各类算法
算法导论之堆排序,C语言实现版
C语言版希尔排序算法完成代码,欢迎交流讨论
冒泡排序 简单选择排序 c语言基础 排序算法 数组操作 排序算法实验 简单的c语言程序 排序算法输出
Shell(希尔)排序算法C语言源程序,算法思路:比如对4个数进行排序,4个数分为两组,然后第1个数与第3个数进行比较,第2个数与第4个数进行比较,调整位置,然后将经过调整后的第2位与第3位再进行比较 。
主要介绍了希尔排序算法的C语言实现示例,希尔排序可以看作为一种高级的插入排序,需要的朋友可以参考下
python数据结构与算法分析,希尔排序法实现,希尔排序.py
算法导论上的堆排序c++源程序||学习分享
中科大软件学院 算法导论课程实验 正式题目一 常见排序算法的实现与性能比较 实验报告 包括合并排序、插入排序、希尔排序、快速排序、冒泡排序、桶排序
算法导论版的快速排序的完整实现。C语言版。免积分送给需要的朋友。
算法导论 c语言的全部代码实现 需要c99的支持