几个基础算法介绍和实现——希尔排序
来源:互联网 发布:网游加速器 知乎 编辑:程序博客网 时间:2024/06/04 20:11
希尔排序
希尔排序通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序位置,所以希尔排序也叫做缩小增量排序
以下为转载内容希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1)插入排序在对几乎已经排好序的数据操作时,效率高, 即可以达到线性排序的效率。2)插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。我们将数组中两个元素之间的距离称为Gap,相邻元素之间的Gap自然是1,很明显的,插入排序的算法在调节元素的时候,Gap是1,这就造成了上面讲的低效的原因2)。因此希尔排序的思想如下:1. 假设序列的元素个数是n,选取一个初始Gap的d(d<n)2. 将序列中元素之间距离(即Gap)为d的元素分为一组,在每组之间直接进行插入排序3. 全部完成以后,缩小Gap至d1(d1<d),然后继续2直到Gap为1常见的Gap序列如下:1)希尔原本的Gap:N/2、N/4、...1(反复除以2)2)Hibbard的Gap:1、3、7、...、2k-1(k表示第几个gap)3)Knuth的Gap: 1、4、13、...、(3k - 1) / 2(k表示第几个gap)4)Sedgewick的Gap: 1、5、19、41、109、...
代码如下:void Sort::shellSort(int(&a)[11], int n){ int i, j, increment; int temp; for (increment = n / 2; increment >= 1; increment /= 2) { for (i = increment; i < n; i++) { temp = a[i]; for (j = i; j >= increment; j -= increment) { if (temp < a[j - increment]) a[j] = a[j - increment]; else break; } a[j] = temp; } }}int main(void){ Sort m_sort; int a[11] = { 34, 8, 64, 51, 32, 21, 99, 108, 54, 33, 77 }; m_sort.shellSort(a, 11); for (int i = 0; i < 11; i++) { cout << a[i] <<endl; } system("pause"); return EXIT_SUCCESS;}
运行结果:
总结:
1. 希尔排序的平均时间复杂度是O(n2)
2. 希尔排序为非稳定排序
阅读全文
0 0
- 几个基础算法介绍和实现——希尔排序
- 几个基础算法介绍和实现——插入排序
- 几个基础算法介绍和实现——选择排序
- 几个基础算法介绍和实现——冒泡排序
- 几个基础算法介绍和实现——基本概念
- 排序算法—希尔排序算法分析与实现(Python)
- 算法基础-希尔排序
- 【算法基础】希尔排序
- 基础算法-希尔排序
- 几个算法知识--希尔排序
- 简单排序算法实现——希尔排序
- Java实现排序算法——希尔排序
- 实现希尔排序算法。
- 基础算法系列(七)——希尔排序
- 数据结构与算法——插入排序和希尔排序
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 算法——希尔排序
- 算法 —— 希尔排序
- Kafka你我之见
- Web前端-HeadFirst-笔记-Ch11-流,float,分栏
- HTML5的新特性新功能,与旧版本的HTML差异之处
- Class.forName()
- jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。<s:a action><s:iterator><s:param>ognl表达式 在编写SSH2项目的时候,除
- 几个基础算法介绍和实现——希尔排序
- 欢迎使用CSDN-markdown编辑器
- Servlet中的过滤器Filter详解
- 关于malloc/free && new/delete
- c++基础和《C++ Primer第五版中文版》笔记
- 文章标题
- 了解kafka
- testng.xml文件结构
- java多线程(一)