逆序对问题
在一個數組中,左邊的數如果比右邊的數大,則折兩個數構成一個逆序對,請打印所有逆序對
def mergeSort(L,l,r): if l == r:return 0mid = int(l + ((r-l)>>1))"""l + ((r-l)>>1) = l + (r-l)/2 主要是防止內存溢出( l + r ) >> 65536"""mergeSort(L,l,mid)mergeSort(L,mid+1,r)merge(L,l,mid,r)def merge(L,l,m,r):help_ = [0] * (r-l+1)i = 0p1 = lp2 = m + 1res = 0while p1 <= m and p2 <= r:if L[p1] < L[p2]:help_[i] = L[p1]i +=1p1 +=1else:print([L[p1],L[p2]])help_[i] = L[p2]i +=1p2 +=1while p1 <= m:help_[i] = L[p1]i +=1p1 +=1while p2 <= r:help_[i] = L[p2]i +=1p2 +=1for i in range(len(help_)):L[l+i] = help_[i]mergeSort([1,3,4,2,5],0,4)?
總結