• 排序之希尔排序


    希尔排序

    我们先在方法中找出它最大的间隔h,
    第一趟,将要排序的一组数按增量h分成若干组,每组中记录的下标相差h,
    对每组中全部元素进行排序。
    第二趟,间隔为h = (h-1)/3,以后的每趟间隔都是h = (h-1)/3,
    直到间隔变为1,整个要排序的数被分成一组,排序完成。

    一般的初次取序列的一半为增量,以后每次减半,直到增量为1。

    public class ShellSort {
        public static void shellSort(int[] arr) {
            //临时变量,储存当前元素
            int h = 1;
            //计算最大间隔
            while(h<arr.length/3) {
                h = h*3 + 1;
            }
            
            while(h>0) {
                int 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;
            }
        }
    }

  • 相关阅读:
    mybatis的知识点总结
    orm框架与缓存的关系
    mybatis知识点
    mybatis
    MyBatis的动态SQL详解
    工资谈判技巧
    MySQL 创建函数(Function)
    开始AFNetworking
    hdu 4778 Rabbit Kingdom(减少国家)
    设计模式:代理模式
  • 原文地址:https://www.cnblogs.com/du001011/p/10295839.html
Copyright © 2020-2023  润新知