快排求逆序数&快排与归并时间复杂度比较
来源:互联网 发布:linux vi esc 没反应 编辑:程序博客网 时间:2024/06/07 01:36
本文参考其他用快排求逆序数的方法。
在用快排求解逆序数前,我先考虑了这个问题,1:归并和快排的时间复杂度都是nlog(n),为什么不用归并?
我认为应该是由于快排在每次合并时都有用到临时数组,然后每次还需要把临时数组重新copy到原数组中 ,增加了时间复杂度;快排虽然也存在最坏的情况,即n^2,但是由于其随机性,所以期望的时间复杂度仍然是nlog(n),因此如果能用快排求逆序数的话,也是不错的。
本文用快排求逆序数思想:
a[10]={7,1,9,5,6,3,11,2,10,8}
7
1
9
5
6
3
11
2
10
9
s1:1
5
3
2
s2:7
9
11
10
9
以上比较过程中记录逆序数,时间复杂度nlog(n)。求得逆序数:2500572073
涉及到的 文件,百度网盘 :http://pan.baidu.com/s/1dFxB64T
#!/usr/bin/env python# coding:utf8__author__ = 'yangrui'fp = open('./Q8.txt', 'r')lines = fp.readlines()fp.close()arr = []for line in lines: line = line.strip('\n') arr.append(int(line))#arr = [7,1,9,5,6,3,11,2,10,8]count = 0def SortAndCount(tmp, left, right): global count if left == right or right == -1: return if right-left == 1: if tmp[right] < tmp[left]: count += 1 return s1 = [];s2 = [] mid = tmp[(right-left)/2] flag = 0 for i in range((right-left)/2): if tmp[i] > mid: count += 1 flag += 1 s2.append(tmp[i]) elif tmp[i] < mid: count += flag s1.append(tmp[i]) for i in range((right-left)/2+1, right+1): if tmp[i] > mid: s2.append(tmp[i]) flag += 1 elif tmp[i] < mid: s1.append(tmp[i]) count += 1+flag SortAndCount(s1, 0, len(s1)-1) SortAndCount(s2, 0, len(s2)-1)if __name__ == '__main__': SortAndCount(arr, 0, len(arr)-1) print(count)
0 0
- 快排求逆序数&快排与归并时间复杂度比较
- [逆序数]用归并排序求逆序数。时间复杂度(n*logn)
- 快排与堆排序、归并排序的比较
- java-归并排序与快排的效率比较
- 归并与快排算法
- 转载:快排时间复杂度分析
- 快排和归并排序的比较
- 数组的逆序+归并+树状数组+快排
- 使用快排和归并求解逆序对
- 归并排序与逆序数
- 传输速率的比较 快排的最好和最坏的时间复杂度比较 递归深度的问题 ackerman函数
- 分治实现快排与归并排序
- 快排最优时间复杂度,平均时间复杂度和最差时间复杂度分析
- 快排最优时间复杂度,平均时间复杂度和最差时间复杂度分析
- 逆序数 时间复杂度O(nlgn)
- 归并排序;分治算法;复杂度nlgn;附加逆序数算法;
- 快排和归并算法比较之swap函数
- 分治、归并、快排
- poj 3177 poj 3352 (边双连通分量裸题+缩点)
- 数组越界问题
- 各种排序思想(个人理解)
- 剑指offer:反转链表(java)
- 使用jquery+ajax实现文件上传
- 快排求逆序数&快排与归并时间复杂度比较
- 同源策略与跨域解决方案
- MVC medoo数据类库
- Dialog对话框以及自定义Dialog
- 【Design Pattern】-----Facade
- codeforces 721C (拓排 + DP)
- java io系列05之 ObjectInputStream 和 ObjectOutputStream
- UVA 1212 - Duopoly(最小割)
- Codeforces 486B OR in Matrix【水题】