找逆序对(Python)
作者:dawncold 发布时间:February 3, 2012 分类:技术
其实和昨天的归并排序基本内容一样,就多加了几行输出来帮助理解,找逆序对就是多了一个统计变量而已。
#! /usr/bin/env python
# coding: utf-8
def merge(arraylist, first, middle, last):
temp = []
i = first
j = middle + 1
while i <= middle and j <= last:
if arraylist[i] <= arraylist[j]:
temp.append(arraylist[i])
i += 1
else:
global inv
inv += middle - i + 1
temp.append(arraylist[j])
j += 1
while i <= middle:
temp.append(arraylist[i])
i += 1
while j <= last:
temp.append(arraylist[j])
j += 1
print temp
for i in range(0, last - first + 1):
arraylist[first + i] = temp[i]
def merge_sort(arraylist, first, last):
if first < last:
middle = (first + last) / 2
print "first = %d, middle = %d, last = %d" % (first, middle, last)
merge_sort(arraylist, first, middle)
merge_sort(arraylist, middle + 1, last)
merge(arraylist, first, middle, last)
if __name__ == "__main__":
inv = 0
arr = [2,3,8,6,1]
print "orign: ", arr
merge_sort(arr, 0, len(arr) - 1)
print "final: ", arr
print "inv = %d" % inv