Java 希尔排序(Shell Sort)
来源:互联网 发布:旅行包 知乎 编辑:程序博客网 时间:2024/06/10 21:45
- 含义
- 算法描述
含义
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
算法描述
- 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。
- 所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序。
- 取第二个增量d2 < d1重复上述的分组和排序,
- 直至所取的增量dt=1(dt < dt-l < … < d2 < d1),即所有记录放在同一组中进行直接插入排序为止。
希尔排序的时间复杂度与增量序列的选取有关,例如希尔增量时间复杂度为O(n^2),而Hibbard增量的希尔排序的时间复杂度为O(N^(5/4)),但是现今仍然没有人能找出希尔排序的精确下界。
public class ShellSort { //希尔排序算法入口 public int[] shellSort(int[] Arr) { //检查参数合法性 if(Arr == null || Arr.length<2) return Arr; // 初始化步长 int feet = Arr.length >> 1; return sort(Arr,feet); } // 希尔排序算法具体实现方法(地柜方式) public int[] sort(int[] Arr,int feet){ // 不长小于1就退出,因为步长为1时排序完成了 if(feet < 1) return Arr; for(int i = feet; i< Arr.length; i++){ int index = i; // 将当前位置的数据放置到合适的位置 while(index>=feet){ if(Arr[index]<Arr[index-feet]){ swap(Arr,index,index-feet); }else{ break; } index -= feet; } } // 递归调用排序方法,每次递归,步长减少一半 return sort(Arr,feet>>1); } public void swap(int[] Arr,int index1,int index2){ int temp = Arr[index1]; Arr[index1] = Arr[index2]; Arr[index2] = temp; }}
理论知识参考链接
13种排序算法
百度百科之希尔排序
1 0
- Java 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序算法(Shell Sort) Java实现
- Shell Sort 希尔排序
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 懒人听书:师父关于人们的奇怪之处之谈
- 第2课时 一个小游戏
- Android网络图片三级缓存
- Erlang语言学习系列(二)
- 禁止鼠标唤醒windows 7睡眠
- Java 希尔排序(Shell Sort)
- 隐马尔科夫模型
- 国内四个不错的技术团体博客
- IOS中xib+代码实现自定义cell中嵌套
- 怎样成为一名黑客?
- Spring Controller接收http传值
- 一头扎进Shiro-自定义Realm
- 第3时 变量和字符串
- AES加密解密&&SHA1、SHA加密&&MD5加密