程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 【排序算法】希爾排序算法 Java實現

【排序算法】希爾排序算法 Java實現

編輯:關於JAVA

【排序算法】希爾排序算法 Java實現。本站提示廣大學習愛好者:(【排序算法】希爾排序算法 Java實現)文章只能為提供參考,不一定能成為您想要的結果。以下是【排序算法】希爾排序算法 Java實現正文


希爾排序算法是按其設計者希爾(Donald Shell)的名字命名,該算法由1959年公布,是插入排序的一種更高效的改進版本。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

  • 插入排序在對幾乎已經排好序的數據操作時,效率高。
  • 但插入排序一般來說是低效的,因為插入排序每次只能將數據移動一位。
  1. 基本思想
    1. 先取一個小於n的整數d1作為第一個增量,把待排序的全部記錄分成dx個組。所有距離為d1的倍數的記錄放在同一個組中
    2. 先在各組內進行直接插入排序
    3. 然後取第二個增量d2<d1重復上述的分組和排序
    4. 直至所取的增量dt=1,即所有的記錄放在同一個組中進行直接排序插入排序為止
  2. 算法實現
    public class ShellSorter {
        public void sort(int[] array) {
            int d = array.length;
    
            do {
                d /= 2;
                shellPass(array, d);
            }
            while (d > 1);
        }
    
        private void shellPass(int[] array, int d) {
            // 直接插入排序
            for (int i = d; i < array.length; i++) {
                int tmp = array[i];
    
                if (array[i] < array[i - d]) { // 對同一個組的兩個數進行比較,如果前面的數大於後面的數的話,交換位置
                    int j;
    
                    for (j = i - d; j >= 0 && tmp < array[j]; j -= d) {
                        array[j + d] = array[j];
                    }
    
                    array[j + d] = tmp;
                }
            }
        }
    }

參考文章:

  1. https://zh.wikipedia.org/wiki/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F
    
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved