希尔排序的时间复杂度在O(N)到O(N2)之间,在大量数据排序中实践性能超过堆排序。特点是算法简单但是分析复杂。下面是实现:

/** a[] is an array to be sorted* n1 is the T array length* inc[] is the array to indecate the increasement* n2 is the inc array length*/
template<typename T>
void shellsort(T a[],int n1,int inc[],int n2)
{for(int i=0;i<n2;++i){for(int j=inc[i];j<n1;++j){T tmp = a[j];int k;for(k=j;k>=inc[i];k-=inc[i]){if(tmp<a[k-inc[i]])a[k]=a[k-inc[i]];elsebreak;}a[k]=tmp;}}
}

  需要注意的几点:

    1.希尔排序要参考递减序列,可以采用2k-1(值<N)序列。大数据量的时候采用sedgewick序列。

    2.每一次间隔排序实际上是一个插入排序而不是冒泡。所以要从后向前遍历。

转载于:https://www.cnblogs.com/jwk000/archive/2013/06/04/3116714.html

基本排序算法之1——希尔排序shellsort相关推荐

  1. js排序算法详解-希尔排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...

  2. 希尔排序是一种稳定的排序算法_全面解析十大排序算法之四:希尔排序

    点击上方蓝字关注我们吧 1. 十种排序算法的复杂度和稳定性 时间复杂度:一个算法消耗所需要的时间 空间复杂度:运行一个算法所需要的内存时间 稳定性:如一个排列数组:1.4.5.6.4.7. 此时有一对 ...

  3. 排序算法研究之希尔排序(shell sort)

    前面几个小节,我们分别介绍了冒泡排序,插入排序,直接快速排序 ,选择排序本节,我们介绍插入排序的改进版的希尔排序. 希尔排序是1959年,Shell发明的,这是第一个突破O(n2)的排序算法,他与直接 ...

  4. python实现希尔排序算法_python实现希尔排序算法

    希尔排序是插入排序的一种又称"缩小增量排序",是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法 ...

  5. 算法系列【希尔排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 关于时间复杂度: 1.     平方阶 (O(n2)) 排序各类简单排序:直接插入 ...

  6. 算法结构2.希尔排序

    希尔是一个人的名字,因为他在论文中首次提到了这样的排序方式,这是希尔排序的来源 希尔排序,比插入排序有更加的优化, 有很多的文章中说希尔排序中也用到了插入排序,这样的说法只是为了方便理解,其实是不正确 ...

  7. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序

    第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...

  8. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  9. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  10. 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

    题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...

最新文章

  1. python基础数据实例_Python基本数据类型及实例详解
  2. Rushcrm:客户关系管理适合的才是好的
  3. leetcode算法题--扑克牌中的顺子
  4. 算法的性能评价------空间复杂度和时间复杂度
  5. tensorflow从入门到精通100讲(五)-知识图谱( Knowledge Graph)关系抽取之PCNN
  6. oracle备份和还原
  7. 网上花店系统源码_如何创建一个花店线上商城,可以开发一个微信小程序
  8. quarts集群 运维_精讲Elastic-job + Quartz实现企业级定时任务
  9. Visio连接线设置箭头形状失效
  10. 爬虫python下载网站所有图片_Python爬虫-搜索并下载图片
  11. 汇客huikeCRM项目实战-牛刀小试
  12. 普通话测试-短文60篇文章,附带拼音(51-60篇)
  13. 自步学习-Self-paced Learning
  14. 超强实用 中国各地特产风味大搜捕
  15. 基于FPGA 的毫米波雷达系统
  16. Manifest merger failed with multiple errors
  17. PMP知识点:项目管理十大知识领域和47个过程
  18. Java 38---Hibernate框架(1)
  19. SQL 总结(索引index、子查询、分页、开窗函数等)
  20. Vol版Vue.NetCore开源项目

热门文章

  1. vue $slot基本用法
  2. react-native环境配置——Android工程搭建
  3. iOS常用---NSString,NSMutabuleString
  4. samba服务的原理与搭建(转的别人的)
  5. Dictionary Union and Sort by value
  6. sql中的一些通用函数
  7. python3+selenium入门12-警告框处理
  8. Ubuntu 16.04服务器 软件的安装及配置
  9. 《C++代码设计与重用》——2.7 转型
  10. Eclipse或者Myeclipse卡,慢的解决方法