【排序算法】希尔排序(java实现)
来源:互联网 发布:织梦 列表 ajax 排序 编辑:程序博客网 时间:2024/04/28 19:22
1.基本思想:
希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进。该方法又称缩小增量排序.
(1)选取一个小于n的整数d1作为第一个增量,把序列的全部元素分成d1个组。
所有距离为d1的倍数的元素放在同一个组中,在各组内进行直接插人排序。
(2)选取第二个增量d2<d1重复上述的分组和排序。
(3)重复(2)步骤,直至所取的增量dx=1,整个数据合成为一组,构成一组有序记录,则完成排序。
一般而言,初始增量d1 选取序列长度n 的一半, 第二个增量d2 为 d1 的一半,即每次取上一次增量的一半。
2.算法分析:
时间复杂度: 最好O(N) 最坏:O(N^2)
空间复杂度:O(1)
稳定性:不稳定
3.算法实现:
在不同的增量下,排序操作是一样的——先按照增量分组,再组内进行排序,所以最外层为增量变化的循环。
在增量相同的情况下,各组组内操作相同,所以先进行分组。
最后,组内进行直接插入排序(也可改进为折半插入排序 )。
总共3层for 循环。
public static void ShellInsertSort(int[] array){int len =array.length;//增量for(int gap = len/2; gap > 0; gap/=2){for(int i=0; i < gap ; i++){//组内采用直接插入法 进行排序for (int j =i+gap ;j < len; j += gap){int t = array[j];int k =j-gap;while(k >= 0 && array[k] > t){array[k+gap] = array[k];k-=gap;}array[k+gap] = t;}}}}
注:
直接插入排序是稳定的,而希尔排序不稳定。
直接插入排序更适合原始记录基本有序的序列。
希尔排序的比较和移动次数均比直接插入排序少,n越大,效果越明显。
0 0
- java实现希尔排序算法
- java实现希尔排序算法
- java希尔排序算法实现
- 【排序算法】希尔排序(java实现)
- java实现简单排序算法:希尔排序
- 排序算法之希尔排序 java实现
- 实现希尔排序算法。
- Java实现选择排序、插入排序、希尔排序算法
- 经典排序算法(二)--插入排序、希尔排序(Java实现)
- java希尔排序算法
- java希尔排序算法
- java希尔排序算法
- Java算法-希尔排序
- Java排序算法 希尔排序
- Java排序算法:希尔排序
- JAVA排序算法---希尔排序
- 希尔排序算法的JAVA实现
- 希尔排序算法的JAVA实现
- dao
- Android scrollTo()与scrollBy()的区别
- 关于 Fiddler 出现Response is encoded and may need to be decoded before inspection.
- 常用软件下载地址
- 硬盘分区表知识
- 【排序算法】希尔排序(java实现)
- RMI使用
- VR产业链
- poj2289
- sso with ad credential and saml2.0 integration(2)
- 图像的矩
- POJ2406 Power Strings
- 练习3-M
- [bzoj4513][SDOI2016]储能表