Python實現合併排序(歸併排序)(一文看懂)

2021-08-21 11:25:00 字數 915 閱讀 7413

一線大廠的師兄師姐結合自己的工作實踐,將資料知識淺顯道來,每天三分鐘,助你成為資料達人。還有面試指導和內推機會。

歸併排序採用分而治之的原理:

一、將乙個序列從中間位置分成兩個序列;

二、在將這兩個子串行按照第一步繼續二分下去;

三、直到所有子串行的長度都為1,也就是不可以再二分截止。這時候再兩兩合併成乙個有序序列即可。

def merge(a, b):

c =

h = j = 0

while j < len(a) and h < len(b):

if a[j] < b[h]:

j += 1

else:

h += 1

if j == len(a):

for i in b[h:]:

else:

for i in a[j:]:

return c

def merge_sort(lists):

if len(lists) <= 1:

return lists

middle = len(lists)//2

left = merge_sort(lists[:middle])

right = merge_sort(lists[middle:])

return merge(left, right)

if __name__ == '__main__':

a = [14, 2, 34, 43, 21, 19]

print (merge_sort(a))

歸併排序(合併排序)

題目 要求氣泡排序的交換次數,也就是求逆序數的個數。在乙個排列中如果有兩個數的排序和所規定的排序規則相反,則這兩個數是乙個逆序。乙個排列中的逆序的總數就是這個排列的逆序數。用歸併排序,求逆序數的個數。poj 2299 這道題充分印證了,即使merge本身可能用的不多,但分冶的思想卻是無所不在 inc...

歸併排序(合併排序)

合併排序 merge sort 是又一類不同的排序方法,合併的含義就是將兩個或兩個以上的有序資料序列合併成乙個新的有序資料序列,因此它又叫歸併演算法。它的基本思想就是假設陣列a有n個元素,那麼可以看成陣列a是又n個有序的子串行組成,每個子串行的長度為1,然後再兩兩合併,得到了乙個 n 2 個長度為2...

合併排序(歸併)

mergesort.h include using std vector class mergesort mergesort.cpp include stdafx.h include using std cout using std endl include using std vector inc...