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;
        }
    
    }
    
    
  • 相关阅读:
    图片上传-下载-删除等图片管理的若干经验总结3-单一业务场景的完整解决方案
    图片上传-下载-删除等图片管理的若干经验总结2
    HDU 1195 Open the Lock
    HDU 1690 Bus System
    HDU 2647 Reward
    HDU 2680 Choose the best route
    HDU 1596 find the safest road
    POJ 1904 King's Quest
    CDOJ 889 Battle for Silver
    CDOJ 888 Absurdistan Roads
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10761428.html
Copyright © 2011-2022 走看看