[日常学习]灵感来自MergeSort的求逆序数...

来源:互联网 发布:淘宝宝贝怎么编辑尺寸 编辑:程序博客网 时间:2024/06/10 23:56
#!/usr/bin/pythondef countsplit(l,r) :l = sorted(l)r = sorted(r)i = 0j = 0c = 0while(i < len(l) and j < len(r)) :if(l[i] <= r[j]) :i+=1else :c+=len(l)-ij+=1return cdef count(array) :if len(array) == 1 :return 0l = array[0:len(array)/2]r = array[len(array)/2:]lc = count(l)rc = count(r)s = countsplit(l,r)return s+lc+rcs = raw_input()a = [int(x) for x in s.split(' ')]print count(a)

依然有些不懂的地方,不知道为什么是O(nlogn)而不是O(n(logn)^2)...

主要是其中调用了一次sort.

Update:

 之前复杂度没分析对是因为代码写错了....

#!/usr/bin/pythondef countsplit(l,r) :i = 0j = 0c = 0s = []while i < len(l) and j < len(r) :if(l[i] <= r[j]) :s.append(l[i])i+=1else :c+=len(l)-is.append(r[j])j+=1while i < len(l) :s.append(l[i])i+=1while j < len(r) :s.append(r[j])j+=1return s,cdef count(array) :if len(array) <= 1 :return array,0l = array[0:len(array)/2]r = array[len(array)/2:]l,lc = count(l)r,rc = count(r)s,sc = countsplit(l,r)return s,sc+lc+rcs = raw_input()a = [int(x) for x in s.split(' ')]a,ac = count(a)print ac

不该sort的...应该是来自merge sort.


原创粉丝点击