数据结构与算法(八)希尔排序
来源:互联网 发布:淘宝网店加盟哪家靠谱 编辑:程序博客网 时间:2024/06/05 04:00
希尔排序
1. 希尔排序的产生
希尔排序是由科学家Donald L.Shell提出的,希尔排序基于插入排序,并添加了一些新的特性,从而大大提高插入排序的执行效率。
2. 插入排序的缺陷,多次移动(参见 插入排序)
假如一个很小的数据在靠右端的位置上。那么要将该数据排序到正确的位置上,则所有的中间数据都需要向右移动一位。
3. 希尔排序的优点
希尔排序通过加大插入排序中元素之间的间隔,并对这些间隔的元素进行插入排序,从而使得数据可以大幅的移动。当完成该间隔的排序后,希尔排序会减少数据的间隔再进行排序。依次进行下去。
4. 间隔的计算
间隔h的初始值为1,通过 h = 3*h+1 来循环计算,直到该间隔大于数组的大小时停止。最大间隔为不大于数组大小的最大值。
(对照下方程序: h<arr.length/3→3*h<arr.length 或者条件可设置为h<=(arr.length-1)/3→h=3*h+1<=arr.length 即 最大间隔为不大于数组大小的最大值。)
5. 间隔减小
可以通过公式 h = (h-1)/3 来计算。
希尔排序
/* * 希尔排序 */public class ShellSort {/* * 排序方法 */public static void sort(long[] arr){//初始化一个间隔int h=1;//计算最大间隔while(h<arr.length/3){h=h*3+1;}while(h>0){//进行插入排序long tmp=0;for(int i=h;i<arr.length;i++){ tmp = arr[i]; int j=i; while(j>h-1 && arr[j-h]>=tmp){ arr[j]=arr[j-h]; j-=h; }arr[j]=tmp;}//减小间隔h=(h-1)/3;}}}
测试:
public class TestShellSort {public static void main(String[] args) {// TODO Auto-generated method stublong[] arr=new long[15];arr[0]=34;arr[1]=23;arr[2]=2;arr[3]=1;arr[4]=4;arr[5]=36;arr[6]=26;arr[7]=24;arr[8]=14;arr[9]=44;arr[10]=35;arr[11]=25;arr[12]=21;arr[13]=11;arr[14]=42;System.out.print("[");for(long num : arr){System.out.print(num+" ");}System.out.print("]");System.out.println();ShellSort.sort(arr);System.out.print("[");for(long num : arr){System.out.print(num+" ");}System.out.print("]");System.out.println();}}
0 0
- 数据结构与算法(八)希尔排序
- Java数据结构与算法《八》希尔排序
- 算法与数据结构(五)--希尔排序
- 【数据结构与算法】希尔排序
- 【数据结构与算法】希尔排序
- (数据结构与算法分析 八)------插入排序,希尔排序,归并排序的实现( Java语言描述)
- 希尔排序实现(ShellSort) Java数据结构与算法
- 数据结构与算法——希尔排序(Java实现)
- 数据结构与算法(9)---Java语言实现:希尔排序
- python数据结构与算法 33 希尔排序
- 【数据结构与算法设计】希尔排序
- 数据结构与算法简记:希尔排序
- 数据结构与算法三:希尔排序
- 数据结构与算法——希尔排序
- 数据结构与算法——希尔排序
- 排序 (插入排序,快速排序,希尔排序)数据结构与算法分析-C语言描述
- 排序算法(八)希尔排序(缩小增量排序)
- Java排序算法(八):希尔排序(Shell排序)
- 递归关键问题(以递归循环打印1~9为例)
- 网线接法
- LeetCode-227. Basic Calculator II (JAVA)实现计算器 II
- 模态视图的呈现方法及返回
- hdu-3669(斜率 dp)
- 数据结构与算法(八)希尔排序
- maven报错Multiple annotations found at this line
- 将html拷贝到项目中修改为jsp后页面出现乱码
- Mysql自定义函数
- 关于QTableWidget动态写入
- 在 CentOS 7 中修改 sshd 的端口
- hdu 1300 Pearls(DP)
- 面试过程总结(经验总结无题目)
- 阻塞非阻塞