zoukankan      html  css  js  c++  java
  • 希尔排序-改进的插入排序

      间隔大移动次数少,间隔小移动距离短。

    public class ShellSort {
        public static void main(String[] args) {
            int[] arr = {9, 6, 11, 3, 5, 12, 8, 7, 10, 15, 14, 4, 1, 13, 2};
            sort(arr);
            print(arr);
        }
    
        /**
         * 希尔排序
         *
         * @param arr
         */
        private static void sort(int[] arr) {
            for (int gap = arr.length / 2; gap > 0; gap /= 2) {
                // 默认第一位排好序,从第二位开始
                for (int i = gap; i < arr.length; i++) { // 外层相当于从无序中抽牌
                    for (int j = i; j > gap - 1; j -= gap) { // 遍历有序的  进行比较换位置
                        if (arr[j] < arr[j - gap]) {
                            swap(arr, j, j - gap);
                        }
                    }
                }
            }
        }
    
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        private static void print(int[] arr) {
    
            for (int i : arr) {
                System.out.print(i + " ");
            }
        }
    }
    

      优化gap:

    Knuth序列

      h = 1

      h = 3*h +1

    /**
         * 希尔排序
         *
         * @param arr
         */
        private static void sort(int[] arr) {
            int h = 1;
            while (h < arr.length / 3) {
                h = h * 3 + 1;
            }
            for (int gap = h; gap > 0; gap = (gap + 1) / 3) {
                // 默认第一位排好序,从第二位开始
                for (int i = gap; i < arr.length; i++) { // 外层相当于从无序中抽牌
                    for (int j = i; j > gap - 1; j -= gap) { // 遍历有序的  进行比较换位置
                        if (arr[j] < arr[j - gap]) {
                            swap(arr, j, j - gap);
                        }
                    }
                }
            }
        }
    

      

  • 相关阅读:
    作业01
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言II博客作业04
    C语言II—作业03
    C语言II博客作业02
    C语言II博客作业01
  • 原文地址:https://www.cnblogs.com/huan30/p/12837584.html
Copyright © 2011-2022 走看看