Python排序演算法之歸併排序

2021-09-27 12:38:43 字數 1510 閱讀 4146

將乙個列表的兩段有序部分進行合併,稱為一次歸併
最壞情況:o(nlogn)

平均情況:o(nlogn)

最好情況:o(nlogn)

o(n)
穩定
較複雜
#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""歸併排序

將乙個列表的兩段有序部分進行合併,稱為一次歸併

時間複雜度:

最壞情況:o(nlogn)

平均情況:o(nlogn)

最好情況:o(nlogn)

空間複雜度:o(n)

穩定性:穩定

複雜性:較複雜

"""# 歸併

defmerge

(ls, low, mid, high)

:"""歸併操作

args:

:param ls: list, 待歸併的列表

:param low: int, 第一段有序列表的起點

:param mid: int, 兩段有序列表的中點

:param high: int, 第二段有序列表的終點

"""ltmp =

i = low

j = mid +

1while i <= mid and j <= high:

if ls[i]

< ls[j]:)

i +=

1else:)

j +=

1while i <= mid:

) i +=

1while j <= high:

) j +=

1 ls[low:high +1]

= ltmp

# 歸併排序

defmerge_sort

(ls, low, high)

:"""歸併排序

將列表分解得越來越小,直到只有乙個元素

args:

:param ls: list, 待歸併的列表

:param low: int, 當前列表的起點

:param high: int, 當前列表的終點

"""if low < high:

mid =

(low + high)//2

merge_sort(ls, low, mid)

merge_sort(ls, mid +

1, high)

merge(ls, low, mid, high)

import random

ls =

list

(range(20

))random.shuffle(ls)

merge_sort(ls,0,

len(ls)-1

)print

(ls)

Python排序演算法之歸併排序

將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併排序是一種穩定的排序方法。我的理解是 將乙個列表對半分成左右兩個子列表,再分別對左右子列表繼續對半分,不斷對半分,直到分成左右子列表各乙個元素時結束,這時每個子列表都...

排序演算法之歸併排序

歸併排序也是經典的使用分治法思想的代表演算法之一。歸併排序的效率很高,而且是一種穩定的排序。其總體的思想思路就是將待排序的元素分成大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排序的子集合合併成排好序的總集合 歸併排序c 實現如下 include void mergesort int arr...

排序演算法之歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。歸併排序基本原理 通過對若干個有序結點序列的歸併來實現排序。所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。歸併排序基本思...