資料結構與演算法之高階排序 希爾 堆 《十一》

2021-07-30 02:40:41 字數 1218 閱讀 9156

基礎排序

資料結構與演算法之基礎排序(冒泡/插入/選擇)《十》

希爾排序

希爾排序又稱為縮小增量排序。該演算法是乙個泛化的插入排序,插入排序在序列幾乎有序的情況下非常有效。希爾排序利用此特性,分多路並使用不同的間距進行插入排序,當間距為1是則就是簡單的插入排序,本質上希爾排序是插入排序的簡單拓展 

優點 對中等大小的序列非常有效

是所有已知o(n^2)排序演算法中最快的

相對簡單的排序演算法

缺點 較大序列不是個好的選擇

不及 歸併 堆 快速排序有效

明顯比 歸併 堆 快速 排序慢

演算法 選擇合適的間距 將序列分成n路

每路使用插入排序

重複上述過程直至間距為1

堆排序

堆排序是一種基於比較的排序演算法,該演算法同時屬於選擇排序。雖然在大多數計算機上的執行效率低於快速排序。但是堆排序最大的優勢是在最壞情況下o(nlogn)
關於堆的基礎知識參考資料結構與演算法之優先佇列《九》

希爾排序

public

void

sortbyshell2(int a)

// 插入到正確位置

a[n] = x; }}

// 步長為1時便是插入排序了 排序也就完成了

if (d == 1)

}}

堆排序

// 調整堆父節點小

public

void adjustheap(int heap, int node, int length)

// 如果父節點大於孩子中最小的

if (heap[node] < heap[child]) else

// 調整完畢 找到了正確位置

heap[node] = temp;}}

// 建立堆

public

void buildheap(int arr, int length)

}// 將建立好的堆進行堆排序

public

void sortbyheap(int array, int length)

}

到此希爾排序和堆排序介紹完畢

資料結構與演算法 希爾排序

希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的 1 修改直接插入排序的 實現增量為gap的直接插入排序。將陣列從start到end中間隔為gap的子串行進行直接插入排序 private static void straightinser...

資料結構 演算法 希爾排序

希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...

資料結構與演算法(八)希爾排序

希爾排序 1.希爾排序的產生 希爾排序是由科學家donald l.shell提出的,希爾排序基於插入排序,並新增了一些新的特性,從而大大提高插入排序的執行效率。2.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...