希尔排序 以及c的实现函数
来源:互联网 发布:最优化求非线性方程 编辑:程序博客网 时间:2024/05/01 08:11
由希尔在1959年提出,又称希尔排序(shell排序)。
原理
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入排序的效果很好。首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操作,直到d=1。
C程序
k=n/2; while(k>0) { for(i=k;i<=n;i++) { t=a[i]; j=i-k; while(j>=1 && t<a[j]) { a[j+k]=a[j]; j=j-k; } a[j+k]=t; } k/=2; }优劣
优点:快,数据移动少; 缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。 不需要大量的辅助空间,和归并排序一样容易实现。希尔排序是基于插入排序的一种算法, 在此算法基础之上增加了一个新的特性,提高了效率。希尔排序的时间复杂度为 O(N*(logN)2), 没有快速排序算法快 O(N*(logN)),因此中等大小规模表现良好,对规模非常大的数据排序不是 最优选择。但是比O(N2)复杂度的算法快得多。并且希尔排序非常容易实现,算法代码短而简单。 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏 的情况下执行的效率会非常差。 专家门提倡,几乎任何排序工作在开始时都可以用希尔排序,若在实际使用中证明它不够快, 再改成快速排序这样更高级的排序算法. 本质上讲,希尔排序算法的一种改进,减少了其复制的次数,速度要快很多。 原因是,当N值很大时数据项每一趟排序需要的个数很少,但数据项的距离很长。 当N值减小时每一趟需要和动的数据增多,此时已经接近于它们排序后的最终位置。 正是这两种情况的结合才使希尔排序效率比插入排序高很多。- 希尔排序 以及c的实现函数
- 希尔排序的c语言实现代码
- C语言希尔排序的实现
- 希尔排序的C语言实现
- 排序算法之希尔排序的思想以及Java实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 希尔排序的实现
- 使用“活动监视器”读取系统内存并确定所使用的 RAM 容量
- iphone 博客大全
- Visio中的大括号
- JPA 教程(一) .
- 关于 cocos2d-x win32 版本的 cpu 占用改良
- 希尔排序 以及c的实现函数
- 优化linux内核pick_next_task函数
- sock5代理服务器-SOCKS5篇
- 图片格式
- 细数Linux中的那些可爱的查找命令
- js和css压缩工具
- Bitmap
- 面试题8答案
- 如何查找技术资料----我的一点心得体会