排序演算法系列 1 歸併排序

2021-10-07 13:49:23 字數 2679 閱讀 3314

知識點:歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。

歸併排序是一種穩定的排序方法。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。

1#測試**

nums=[3

,44,38

,5,47

,15,36

,26,27

,2,46

,4,19

,50,48

]merge(nums)

print

(nums)

執行結果:題目描述:在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007。例如,在陣列中,一共存在5個逆序對,分別是(7,6)、(7,5)、(7,4)、(5,4)、(6,4).

思路:

將陣列分解成成兩個長度為2的子陣列,再把這兩個子陣列分別拆分為兩個長度為1的子陣列。接下來一邊合併相鄰的子陣列,一邊統計逆序對的數目。

這個過程,實際上就是歸併排序的思路。

該排序過程就是歸併排序。

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

class

solution

:def

__init__

(self)

: self.count =

0def

inversepairs

(self, data)

:# write code here

iflen

(data)

<2:

return

0 self.mergesort(data)

# 牛客網上要求輸出要對1000000007取模

排序演算法系列之歸併排序

public class mergesort if index1 middle while index2 high else while index1 middle 將temp low high 序列複製到原序列 system.arraycopy temp,low,array,low,high 1 ...

歸併排序(重溫經典演算法系列)

單個元素肯定有序 歸併排序採用分治思想,分而治之 將待排序陣列劃分為n等分,每份長度為1個元素,則 n份全部有序 再一生二,二生四,逐步兩兩元素有序的區間,歸一合併成1個有序區間 最終會歸併出整乙個陣列元素有序的結果.歸併排序有兩種實現方式 1 自頂向下遞迴呼叫實現 2 自底向上迭代執行實現.左右雙...

演算法系列之三 歸併排序

歸併排序是分治演算法的另乙個典型的體現。與快速排序一樣,它依賴資料之間的比較進行排序。其缺點是需要額外的空間來輔助排序的過程。這使得歸併排序的實用性大大降低,因為在日常的應用中,使用歸併排序的場景都可以使用快速排序來替代。但是它的優點是可以按照預期來切分陣列,每一次都可以對半分,這樣不會出現因為分割...