排序演算法之希爾排序
文中大部分內容為摘抄自網友文章,僅供個人學習和備忘。
希爾排序(Shell's Sort)是插入排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因D.L.Shell於1959年提出而得名。
演算法思想
先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。
演算法步驟
- 選擇一個增量序列t1,t2,…,tk,其中ti>tj,tk=1;
- 按增量序列個數k,對序列進行k 趟排序;
- 每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子序列,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。
演算法穩定性
由於多次插入排序,我們知道一次插入排序是穩定的,不會改變相同元素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以shell排序是不穩定的。
演算法描述(JAVA)
public void sheelSort(int arr[]){
int dk = arr.length/2;
while( dk >= 1 ){
shellSort(arr, dk);
dk = dk/2;
}
}
private void shellSort(int arr[],int k){
for(int i = k;i<arr.length;i++){
if(arr[i] < arr[i - k]){
int j = i - k;
int temp = arr[i];
while(j > -1 && temp < arr[j]){
arr[j + k] = arr[j];
j -= k;
}
arr[j + k] = temp;
}
}
}
參考文章
相關文章
- PHP 排序演算法之希爾排序PHP排序演算法
- 排序演算法總結之希爾排序排序演算法
- 排序演算法__希爾排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- #排序演算法#【2】直接插入排序、希爾排序排序演算法
- 程式猿修仙之路--演算法之希爾排序演算法排序
- 基礎演算法系列 之希爾排序演算法排序
- 希爾排序排序
- 排序演算法之冒泡,選擇,插入和希爾排序演算法
- 希爾排序——重溫排序(二)排序
- 演算法(二)初等排序前篇[插入和希爾排序]演算法排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- 希爾排序(一)排序
- 希爾排序(二)排序
- Java希爾排序Java排序
- 理解希爾排序排序
- java 希爾排序Java排序
- 【譯】Swift演算法俱樂部-希爾排序Swift演算法排序
- 【演算法】希爾排序的實現演算法排序
- python實現希爾排序演算法Python排序演算法
- C#演算法----(三)希爾排序 (轉)C#演算法排序
- C++希爾排序C++排序
- 希爾排序(C++)排序C++
- 【筆記】希爾排序筆記排序
- 希爾排序(Shell Sort)排序
- 排序演算法Python(冒泡、選擇、快速、插入、希爾、歸併排序)排序演算法Python
- javascript希爾排序演算法程式碼例項JavaScript排序演算法
- Python 一網打盡<排序演算法>之從希爾排序演算法的分治哲學開始Python排序演算法
- 關於js陣列的六種演算法---水桶排序,氣泡排序,選擇排序,快速排序,插入排序,希爾排序的理解。JS陣列演算法排序
- 希爾排序java實現排序Java
- 排序演算法之 '快速排序'排序演算法
- 排序演算法之——桶排序排序演算法
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 第二章 :查詢與排序-------希爾排序排序
- 排序演算法之 '歸併排序'排序演算法