java 希爾排序

2021-08-18 15:18:22 字數 1211 閱讀 9830

希爾排序也成為「縮小增量排序」,其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列「基本有序」後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略:將相距某個「增量」的記錄組成乙個子串行,這樣才能保證在子串行內分別進行直接插入排序後得到的結果是基本有序而不是區域性有序。希爾排序是對直接插入排序演算法的優化和公升級。

所謂的基本有序,就是小的關鍵字基本在前面,大的基本在後面,不大不小的基本在中間,例如{2,1,3,6,4,7,5,8,9,}就可以稱為基本有序了。但像{1,5,9,3,7,8,2,4,6}這樣,9在第三位,2在倒數第三位就談不上基本有序。

希爾排序的關鍵並不是隨便分組後各自排序,而是將相隔某個「增量」的記錄組成乙個子串行,實現跳躍式移動,使得排序的效率提高。需要注意的是,增量序列的最後乙個增量值必須等於1才行。另外,由於記錄是跳躍式的移動,希爾排序並不是一種穩定的排序演算法。

希爾排序最好時間複雜度和平均時間複雜度都是

以陣列為例,步長序列為

初始化關鍵字: [26, 53, 67, 48, 57, 13, 48, 32, 60, 50 ]

最後的排序結果:

13 26 32 48 48 50 53 57 60 67

public

static

void

shellsortsmalltobig

(int

data) else

}data[j + increment] = temp;

}for

(int

i = 0

; i < data.length; i++)

system.out

.print(data[i] + " "

); }

}public

static

void

main

(string args) ;

shellsortsmalltobig(data);

system.out

.println(arrays.tostring(data));

}

Java 希爾排序

希爾排序示意圖 希爾排序,說實話有點難,不過還是弄出來了,package com.vgbh public class shellsorting 希爾排序 將無序陣列分割為若干個子串行,子串行不是逐段分割的,而是相隔特定的增量的子串行,對各個子串行進行插入排序 然後再選擇乙個更小的增量,再將陣列分割為...

希爾排序 Java

原理 對於n個待排序的數列,取乙個小於n的整數gap gap被稱為步長 將待排序元素分成若干個組子串行,所有距離為gap的倍數的記錄放在同乙個組中 然後,對各組內的元素進行直接插入排序。這一趟排序完成之後,每乙個組的元素都是有序的。然後減小gap的值,並重複執行上述的分組和排序。重複這樣的操作,當g...

Java 希爾排序

希爾排序,也叫遞減增量排序,是插入排序的一種更高效的改進版本。希爾排序是基於插入排序的。將插入排序演算法 內for迴圈中的所有 1 改為增量就可以。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 基本思想 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄...