排序算法 -- (二)希尔排序

来源:互联网 发布:黑暗之魂3男号捏脸数据 编辑:程序博客网 时间:2024/06/05 01:50

希尔排序


用法:对于直接插入排序问题,数据量巨大时

针对直接插入排序的下效率问题,有人对次进行了改进与升级,这就是现在的希尔排序

希尔排序,也称 递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法


1、原理

1、将数的个数设为n,取奇数k=n/2,将下标差值为k的书分为一组,构成有序序列。2、再取k=k/2 ,将下标差值为k的书分为一组,构成有序序列。3、重复第二步,直到k=1执行简单插入排序。

2、实现

1、首先确定分的组数。2、然后对组中元素进行插入排序。3、然后将length/2,重复1,2步,直到length=0为止。

3、代码

public class SheelSort {    /* 希尔排序 */    public static void sort(int[] a) {        int len = a.length; // 单独把数组长度拿出来,提高效率        while (len != 0) {            len = len / 2;            for (int i = 0; i < len; i++) {// 分组                for (int j = i + len; j < a.length; j += len) {// 元素从第二个开始                    int k = j - len;// k为有序序列最后一位的位数                    int temp = a[j];// 要插入的元素                    for(;k>=0&&temp<a[k];k-=len){ // 从后往前遍历                        a[k+len]=a[k];                     }                    a[k + len] = temp;                    OutNums.print2(j+" -- "+i, a);                }            }        }    }}

4、测试结果

测试类:

这里写图片描述


控制台输出:

这里写图片描述


输出工具类:OutNums.java

这里写图片描述

原创粉丝点击