快排优化Python表示
来源:互联网 发布:淘宝如何参加公益宝贝 编辑:程序博客网 时间:2024/05/21 08:54
基本快速排序分析
以从小到大排序为例
* 选取一个主元(选取方式多样)
* 利用主元,将序列分为两个子序列,左侧都比主元小,右侧都比主元大。
* 对两个子序列重复此操作
例如取第一个元素,代码表示如下:
def qsort(arr): if len(arr) <= 1: return arr else: pivot = arr[0] return qsort([x for x in arr[1:] if x < pivot]) + \ [pivot] + \ qsort([x for x in arr[1:] if x >= pivot])
优化方案
- 主元的选取
上面的算法有很大的问题,对于升序或降序序列,效率很差,我优化后的方式是主元取序列首中尾
三个值取平均数,网上有些取三个值的中值的,我认为没必要,为了效率还要将中值换到首或尾。 - 序列中可能有一些和主元相等的元素,上面直接将其并入子序列中了,最好是将其和主元聚集
在一起,子序列缩减幅度也会更快
这样的话定义一个函数:
def getMidNum(list): return (list[0] + list[len(list) - 1] + list[len(list)/2])/3def qsort(arr): if len(arr) <= 1: return arr else: pivot = getMidNum(arr) return qsort([x for x in arr[0:] if x < pivot]) + \ [x for x in arr[0:] if x == pivot] + \ qsort([x for x in arr[0:] if x > pivot])
对比
分别构造长度为10000的随机数列表,升序列表,将序列表和等值列表,对比二者的表现
0 0
- 快排优化Python表示
- 快排的优化
- 快排及优化
- Python实现快排
- Python 快排
- python 快排
- python快排
- Python实现快排
- python快排
- python实现快排
- 快排 Python实现
- 关于快排的优化
- 快排优化方式一则
- 快排总结和优化
- python 版 quicksort 快排
- python三行实现快排
- [转载]关于快排的优化
- pthread 快排 失败的优化版
- 当你访问淘宝的时候,发生了什么?
- Sublime Text 3 常用插件以及安装方法
- android studio 代码提交及冲突解决
- springmvc学习笔记之一
- 四大组件相关知识点
- 快排优化Python表示
- linux下QTE环境搭建
- java画棋盘
- BeaEngine.lib VS2015 链接问题
- Changing speed of a sound file
- java中ServletContext的作用和常见获取方法
- 第七天 广播接受者
- 【Android 学习笔记】之 Material design
- Win10下VS2015(WDK10)驱动开发环境配置