zoukankan      html  css  js  c++  java
  • java算法 -- 希尔排序

    java算法 -- 希尔排序

    基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列
    中的记录“基本有序”时,再对全体记录进行依次直接插入排序。

    1. 操作方法:
      选择一个增量序列 t1,t2,…,tk,其中 ti>tj,tk=1;
    2. 按增量序列个数 k,对序列进行 k 趟排序;
    3. 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进
      行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长
      度。
    public class HillSortTest {
    
    
        public static void main(String[] args) {
            int[] array = {1, 2, 5, 41, 7, 11, 13, 17, 59, 19, 23, 29, 31, 37, 43, 47, 53};
            int[] hillSortArrays = hillSort(array);
            for (int s : hillSortArrays) {
                System.out.print(s + " ");
            }
        }
    
        /**
         * 希尔排序
         *
         * @param arrays 要排序的数组
         * @return 排序后的数组
         */
        private static int[] hillSort(int[] arrays) {
            int temp;
            //默认步长为数组长度除以2
            int step = arrays.length;
            do {
                //每次的step都是前一次的一半
                step = step / 2;
                //确定分组数
                for (int i = 0; i < step; i++) {
                    //对分组数据进行直接插入排序
                    for (int j = i + step; j < arrays.length; j = j + step) {
                        temp = arrays[j];
                        int k;
                        for (k = j - step; k >= 0; k = k - step) {
                            //step 步数前后数据对比并交换
                            if (arrays[k] > temp) {
                                arrays[k + step] = arrays[k];
                            } else {
                                break;
                            }
                        }
                        arrays[k + step] = temp;
                    }
                }
            } while (step != 1);
            return arrays;
        }
    
    }
    
    
  • 相关阅读:
    修改浏览器滚动条样式
    js实现无缝轮播
    JS (canvas) 两个小球碰撞
    js里div随着鼠标一起移动
    js的动态加载、缓存、更新以及复用
    js阻止事件冒泡的两种方法
    核心DOM和html DOM的区别
    JavaScript 事件流、事件处理程序及事件对象总结
    css3 实现飞入由小变大
    简单手写js轮播
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10761428.html
Copyright © 2011-2022 走看看