歸併排序應用之陣列中的逆序對數

2021-10-05 12:57:12 字數 958 閱讀 1454

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。

輸入: [7,5,6,4]

輸出: 5

class

solution

:def

__init__

(self)

: self.count =

0def

reversepairs

(self, nums: list[

int])-

>

int:

self.mergesort(nums)

return self.count

defmergesort

(self, lists):if

len(lists)

<=1:

return lists

num =

int(

len(lists)//2

) left = self.mergesort(lists[

:num]

) right = self.mergesort(lists[num:])

r, l =0,

0 result =

while l <

len(left)

and r <

len(right)

:if left[l]

<= right[r]:)

l +=

1else:)

r +=

1 self.count +=

len(left)

- l result += right[r:

] result += left[l:

]return result

歸併排序應用之求陣列中的逆序數

一,問題描述 給定乙個陣列,求解該陣列中有多少組逆序對。比如 7,5,6,4 一共有五對逆序對。分別是 7,6 7,5 7,4 6,4 5,4 二,演算法分析 有兩種方法來求解逆序對 的數目。一種是,對陣列中的每個元素,都與它後面的元素進行比較,若後面的元素比它小,則找到乙個逆序對。這樣,第乙個元素...

歸併排序求逆序對數

參考部落格 歸併排序求逆序對數 include include include includeusing namespace std 歸併排序是借助乙個輔助陣列來進行排序 int ans 0 void merge sort int a,int l,int r,int t a是原陣列,t是輔助陣列 i...

歸併排序求解逆序對數

定義 逆序對就是對於ia j 這樣的數對在序列中的個數。求解方法 歸併排序是採用分治的思想劃分數列,然後將兩路有序的數列合併。通過劃分和合併的遞迴呼叫來完成排序。在合併的過程中,兩個數列中的元素的相對位置不會發生改變 這裡只是前後關係 而且如果後乙個數列b中某個元素b在需要先放入 優先於前乙個數列a...