演算法整理(3) 歸併排序

2021-10-01 23:31:20 字數 1331 閱讀 4203

3.1 時間複雜度

由於無論陣列中元素如何排列,排序時所需做的操作都一樣,所以此演算法的最優時間複雜度和最差時間複雜度都為:o(n

logn

)。

o(nlogn)。

o(nlog

n)。3.2 原理

歸併排序是一種基於分治法(divide and conquer)的排序方式。演算法的實現主要基於將已有序的子串行合併以得到完全有序的序列,其中將兩個有序列表合併為乙個有序列表的過程被稱為二次歸併。

合併過程中排序函式的具體實現過程:

3.3 **實現(python)

def

divide

(number_list):if

len(number_list)==1

:return number_list

middle_num =

int(

len(number_list)/2

) left_list = divide(number_list[middle_num:])

right_list = divide(number_list[

:middle_num]

)return conquer(left_list, right_list)

defconquer

(left_list, right_list)

: r_index =

0 l_index =

0 result =

while r_index <

len(right_list)

and l_index <

len(left_list)

:if right_list[r_index]

< left_list[l_index]:)

r_index +=

1else:)

l_index +=

1

result += left_list[l_index:

] result += right_list[r_index:

]return result

num_list =[2

,5,3

,7,4

,1,9

,6,3

,5,0

,12]print

(divide(num_list)

)

3.4 reference

排序演算法 3 歸併排序

這篇博文分為四個部分 歸併排序基本思想 基礎 實現與解析 一次優化 二次優化 自底向上的歸併排序 1.歸併排序基本思想 3 歸併排序 小到大排序 1.迴圈的將每乙個部分都分為原來的一半 直到最後每一部分只剩下乙個元素 2.迴圈的將每兩個部分進行合併並且排序 直到最後全部合併 o n log n 2....

排序演算法整理小結(歸併排序)

排序演算法,說真的,就是乙個排列順序的演算法,有些廢話了哈,不過話說回來,順序對於我們實現某些功能有很大的幫助,然而如何能夠快速的將乙個無序數列排列好呢?這次整理了幾種排序方法,總結講述了一下實現的原理以及過程,話比較直接,相信各位看官看 也許比我說要好得多,直接開始吧。單單看這個名字,歸併,歸併什...

歸併排序整理

歸併排序介紹 歸併排序 merge sort 是利用歸併的思想實現的排序方法,該演算法採用經典的分治 divide and conquer 策略 分治法將問題分 divide 成一些小的問題然後遞迴求解,而治 conquer 的階段則將分的階段得到的各答案 修補 在一起,即分而治之 演算法複雜度 歸...