排序演算法之 歸併排序及時間複雜度分析

2021-10-06 01:59:47 字數 975 閱讀 1324

歸併排序

歸併排序是建立在歸併操作上的一種有效排序演算法,該演算法是採用分治法的乙個典型應用。

這裡的分治如何理解?

比如我們要統計本縣城的高考狀元,而乙個縣城中有很多中學,每個中學又有若干個班級,每個班級有若干名學生,每個學生是乙個單獨個體,看成陣列中的乙個元素。接下來,班級內學生兩兩組合併排好序組成一組,然後兩組兩組再進行合併併排好序…各班級分別排好序…各學校分別排好序…縣中所有學生排序…

歸併排序基本思想:

將序列中待排序數分為若干組,每個數字為一組將若干個組進行兩兩合併,保證合併後的組是有序的一直重複第二步操作直到剩下一組,排序完成

效果圖:

演算法實現

#include

int arr1[10]

=, arr2[10]

;//原陣列arr1,臨時空間陣列arr2

void

merge

(int low,

int mid,

int high)

}void

mergesort

(int a,

int b)

}int

main()

時間複雜度

歸併排序的效率是比較高的,設數列長為n,將數列分開成小數列一共要logn步,每步都是乙個合併有序數列的過程,時間複雜度可以記為o(n),故一共為o(nlogn)。因為歸併排序每次都是在相鄰的資料中進行操作,所以歸併排序在o(nlogn)的幾種排序方法(快速排序,歸併排序,希爾排序,堆排序)也是效率比較高的。

歸併排序實現及時間複雜度分析

歸併排序思想 1.把序列分為兩部分,對兩部分分別排序 拆分的邊界條件 元素大於1個 2.合併已排序兩部分 時間複雜度分析 t 1 1 t n 2 t n 2 a n a為常數,每次合併時,複雜度為o n 2 2 t n 4 a n 2 a n 4 t n 4 2 a n 4 2 t n 8 a n ...

歸併排序演算法的時間複雜度

來自教程 我們對n個元素進行歸併排序,需要時間t n 那分解成兩個子陣列排序的時間都是t n 2 merge 函式合併的時間複雜度是o n 歸併排序的時間複雜度計算公式是 t 1 c n 1 時,只需要常量級的執行時間,所以表示為 c。t n 2 t n 2 n n 1 如何求t n 我們對t n ...

排序演算法 歸併排序的時間複雜度分析

歸併排序,其實就是遞迴 合併。歸併排序將陣列取中間分為兩部分,兩個子陣列分別各自再從中間分為兩個子陣列,一直分下去直到不能再分。分完之後,再按照子陣列大小合併為為乙個有序陣列,然後層層向上合併,直到合併為乙個有序的陣列。文字描述不理解的話,使用一副圖來解釋下 其實歸併排序的思想很簡單,圖中也描述的很...