知識點:歸併排序歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。
歸併排序是一種穩定的排序方法。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。
1#測試**
nums=[3
,44,38
,5,47
,15,36
,26,27
,2,46
,4,19
,50,48
]merge(nums)
(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 自底向上迭代執行實現.左右雙...
演算法系列之三 歸併排序
歸併排序是分治演算法的另乙個典型的體現。與快速排序一樣,它依賴資料之間的比較進行排序。其缺點是需要額外的空間來輔助排序的過程。這使得歸併排序的實用性大大降低,因為在日常的應用中,使用歸併排序的場景都可以使用快速排序來替代。但是它的優點是可以按照預期來切分陣列,每一次都可以對半分,這樣不會出現因為分割...