算法笔记--希尔排序
来源:互联网 发布:vb日期控件 编辑:程序博客网 时间:2024/04/29 04:16
希尔排序是直接插入排序的改进版,对于待排序序列的不同情况效率相近。
1. 算法思想
先选取一个小于n的增量d1,把序列中所有元素分成d1个组,所有距离为d1的倍数的元素在同一组中,在各组内执行直接插入排序。然后选取一个更小的增量d2,重复上述分组和排序过程;继续减小增量,直至增量为1,即所有元素在同一组中直插排序。
因此希尔排序又叫缩小增量排序法。
2. 时间复杂度
最好情况 O(n^1.3):与增量序列的选取有关,尚未定论最好情况的复杂度是多少,目前找出最好的好像是n的1.3次方
最坏情况 O(n^2):Mark Allen Weiss 的《Data Structures and Algorithm Analysis in C》一书中有论证
3. 空间复杂度 O(1)
就地排序,辅助空间为常数级
4. 稳定性
不稳定。存在不相邻元素之间的交换
5. 代码实现(C语言)
代码中使用的增量序列是不断除2的方法,这是希尔排序最初使用的序列,效率比较低。
void ShellSort(int *A, int n){int i, j;int tmp;int d = n / 2;while (d){for (i = d; i < n; ++i){j = i;tmp = A[j];while(j >= d && tmp < A[j - d]){A[j] = A[j - d];j -= d;}A[j] = tmp;}d = d / 2;}}
0 0
- 算法笔记--希尔排序
- 希尔排序算法笔记
- 算法学习笔记--希尔排序
- Java学习笔记排序算法---------希尔排序
- 【数据结构----笔记5】插入排序算法之【希尔排序算法】
- [学习笔记]Java排序算法:希尔排序(Shell排序)
- 排序算法--希尔排序
- 排序算法-希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法---希尔排序
- 排序算法---希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法:希尔排序
- 排序算法:希尔排序
- 【排序算法】希尔排序
- 排序算法---希尔排序
- 反向索引(Inverted Index)
- python for in 语法 一览
- 【SSH三大框架】Struts2基础第八篇:Struts2用AJAX实现JSON插件的使用
- 黑马程序员---------java基础File类和IO常用封装类
- 动态添加子控件
- 算法笔记--希尔排序
- Java实现堆栈(list实现)
- 面试笔试问题总结(五)—数组、链表、二叉树
- 有分享,有交流,才有进步
- 原理 zip文件到底是个什么东西
- performSelector may cause a leak because its selector is unknown
- elipse安装pydev插件找不到问题解决
- PID散列表
- 用MATLAB改写DICOM文件中的图像数据