資料結構學習4 歸併排序和希爾排序的基本思想

2021-08-20 13:07:33 字數 1403 閱讀 7260

選擇排序和快速排序原理及實現

簡單排序之氣泡排序和插入排序原理及python實現

1. 歸併排序:歸併排序(merge-sort)是利用

歸併的思想實現的排序方法,該演算法採用經典的

分治(divide-and-conquer)策略(分治法

將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之

)。(1)分而治之

可以看到這種結構很像一棵完全二叉樹,本文的歸併排序我們採用遞迴去實現(也可採用迭代的方式去實現)。

分階段可以理解為就是遞迴拆分子序列的過程,遞迴深度為log2n。

(2)合併相鄰的有序子串行

2. 希爾排序:希爾排序也是一種

插入排序

,它是簡單插入排序經過改進之後的乙個更高效的版本,也稱為

縮小增量排序,

同時該演算法是衝破o(n

2)的第一批演算法之一。

基本思想:

簡單插入排序很循規蹈矩,不管陣列分布是怎麼樣的,依然一步一步的對元素進行比較,移動,插入,比如[5,4,3,2,1,0]這種倒序序列,陣列末端的0要回到首位置很是費勁,比較和移動元素均需n-1次。而希爾排序在陣列中採用跳躍式分組的策略,通過某個增量將陣列元素劃分為若干組,然後分組進行插入排序,隨後逐步縮小增量,繼續按組進行插入排序操作,直至增量為1。希爾排序通過這種策略使得整個陣列在初始階段達到從巨集觀上看基本有序,小的基本在前,大的基本在後。然後縮小增量,到增量為1時,其實多數情況下只需微調即可,不會涉及過多的資料移動。

我們來看下希爾排序的基本步驟,在此我們選擇增量gap=length/2,縮小增量繼續以gap = gap/2的方式,這種增量選擇我們可以用乙個序列來表示,,稱為增量序列。希爾排序的增量序列的選擇與證明是個數學難題,我們選擇的這個增量序列是比較常用的,也是希爾建議的增量,稱為希爾增量,但其實這個增量序列不是最優的。此處我們做示例使用希爾增量。

資料結構學習 希爾排序

演算法描述 希爾排序是插入排序的一種改進,主要是為了解決當較小的資料大都出現在陣列後面時導致的移動次數明顯增多的問題,思想是使用乙個不斷縮小的增量gap將陣列元素分組,在每個分組內部先進行插入排序,當gap減少到1時整個陣列元素分在一組,最後進行一次插入排序,整個排序過程結束。演算法時間複雜度 最好...

演算法與資料結構學習 08 歸併排序

總體思想,將兩個有序表合成乙個有序表 方法一 迭代法 void merge two int in,int out,int low,int middle,int high while i middle out k in i while j high out k in j int merge all i...

資料結構 歸併排序

排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...