對資料結構和演算法的總結和思考(三)--希爾排序
希爾排序是第一個時間複雜度突破O(n^2)的高階演算法。顧名思義,這就是被希爾發現的一種排序演算法。演算法本質為分組插入排序。具體實現為:
let count = 0;
function shellSort(arr) {
let gap = 1, times = 2;
while(gap 0; gap = Math.floor(gap / times)) {
console.log(gap);
for (let i = gap; i = 0 && arr[j] > temp; j-= gap) {
count ++;
arr[j + gap] = arr[j];
flag = j;
}
arr[flag] = temp;
}
}
return arr;
}
let sortArr = [];
for (let i = 0; i
我來解析下上面的程式碼。
let gap = 1, times = 2;
while(gap
這一小段程式碼是確認一個間隙值,times是設定間隙值得倍數。此倍數可以任意設定,不過為2的時候相對錶現比較好比較穩定。gap為間隙值,間隙值最後一次一定是1,設定間隙值的目的是為了分割槽比較,例如如果設定為times為2,那麼第一次就是從中間開始左右兩邊比較,左邊放較小值,右邊放較大值,然後依次比較。
for (gap; gap > 0; gap = Math.floor(gap / times)) {
console.log(gap);
for (let i = gap; i = 0 && arr[j] > temp; j-= gap) {
count ++;
arr[j + gap] = arr[j];
flag = j;
}
arr[flag] = temp;
}
}
這一段程式碼就是分割槽進行比較的插入排序。由於是插入排序,排序的初始區間是有序的,所以可以只找到一個正確的插入位置就行,後續的一定是滿足規則的,所以這一行j >= 0 && arr[j] > temp可以這樣寫,當然, arr[j] > temp也可以寫在if語句裡面。
由於是插入排序,很顯然我們可以採用二分查詢法進行最佳化,具體程式碼實現請童鞋們自己動手,如果有困難可以聯絡我,我會在github上附上對應的程式碼。
以上就是希爾排序的全部內容,下一篇為快速排序,thx。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4301/viewspace-2808023/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對資料結構和演算法的總結和思考(六)--計數排序資料結構演算法排序
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- 資料結構上機——希爾排序(含監視哨版本)資料結構排序
- 資料結構和演算法總結--棧資料結構演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 對四種限流演算法的思考和總結演算法
- 【資料結構】棧和佇列的總結對比資料結構佇列
- C#資料結構與演算法系列(二十一):希爾排序演算法(ShellSort)C#資料結構演算法排序
- [資料結構拾遺]字串排序演算法總結資料結構字串排序演算法
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- js資料結構和演算法(9)-排序演算法JS資料結構演算法排序
- 資料結構基礎和演算法題系列總結資料結構演算法
- 排序演算法__希爾排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- Java資料結構與排序演算法 (三)Java資料結構排序演算法
- 【演算法與資料結構】經典排序演算法總結演算法資料結構排序
- SpringCloud大型企業分散式微服務雲架構原始碼之【資料結構】-排序-希爾排序SpringGCCloud分散式微服務架構原始碼資料結構排序
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- 資料結構和演算法:03.冒泡、選擇排序資料結構演算法排序
- 資料結構和演算法資料結構演算法
- 對資料結構和演算法的關係的理解資料結構演算法
- 資料結構和演算法面試題系列—排序演算法之快速排序資料結構演算法面試題排序
- Java的資料結構和演算法Java資料結構演算法
- JavaScript 的資料結構和演算法JavaScript資料結構演算法
- 【資料結構基礎應用】【查詢和排序演算法】資料結構排序演算法
- 資料結構和演算法面試題系列—排序演算法之基礎排序資料結構演算法面試題排序
- PHP 排序演算法之希爾排序PHP排序演算法
- 資料結構和演算法-堆資料結構演算法
- JavaScript資料結構和演算法JavaScript資料結構演算法
- 聊聊資料結構和演算法資料結構演算法
- 資料結構和演算法面試題系列—遞迴演算法總結資料結構演算法面試題遞迴
- 資料結構和演算法面試題系列—隨機演算法總結資料結構演算法面試題隨機
- 資料結構與演算法——排序資料結構演算法排序
- 【PHP資料結構】PHP資料結構及演算法總結PHP資料結構演算法
- 資料結構和演算法面試題系列—數字題總結資料結構演算法面試題
- 演算法和資料結構在JS中的運用(三)演算法資料結構JS