排序之二(快速排序及随机化)
来源:互联网 发布:php pdf完整版 编辑:程序博客网 时间:2024/05/01 03:32
- 快速排序
快排思想:快速排序是分治法的另一个重要应用。和归并的算法思想一样,也以分治思想为基础,不同之处在于划分的标准不同。归并以数组元素个数进行划分,将原数组划分为两个元素个数相当的子问题。快速排序则以关键字进行划分,将原数组划分为两部分,一部分比关键字小,另一部分比关键字大。
设计思想:分治法。
注意细节:- 实现细节上对于关键字的选择,一是以最小下标元素,二是以最大下标元素为关键字,三可以选择最小、最大、中间元素中值为中间值的元素,四是随机选择关键字。
- 划分的比较时可以从一边直到另一边,也可以交替的在两边进行比较,最终找到关键字的正确位置。
复杂度分析:
空间复杂度:用于元素交换的空间为O(1),但是由于递归的栈空间需要O(n),最好情况也要O(lgn)。
时间复杂度:最好情况,划分在正中央,划分后每个子问题的规模为原问题的一半,这时候为O(nlgn);最坏情况,划分为“斜的”(如:为正序或反序时),每次有一边只有一个元素,这时为O(n^2);按任意固定比例来划分原数组,比如:1/10,9/10,即每次划分都一边占1/10,一边占9/10,则和对半划分的效果一样,也是O(nlgn),只是常数因子可能会大一些;平均时间的计算使用随机化方法,结果为O(nlgn)。
稳定性:
不稳定。原因在于,如果选择关键字刚好为其中一个,则在比较的时候,会调换这两个元素的位置。这个不能由比较是否为严格大于来解决,因为被选的键可能是数组位置小的元素,也可能是数组位置大的元素。
原地性:快排为原地排序。应用场景:
元素的排序情况是随机的;快排在元素数量较大时比其他排序算法一般有较好的性能。
随机化算法
示性函数:概率中的示性函数定义。示性函数在随机化中的应用。
快排时间复杂度:如果划分的情况是最好情况,最差情况交替的出现,则最后的复杂度也是O(nlgn)。
- 随机化快排
由于快排随机化情况下比较好,为了解决已排序时复杂度较高的问题,因此在选择主元关键字时随机选择,从而将问题进行随机化。这种情况下,输入数据不再影响排序的复杂度。因此随机化快排能达到平均值O(nlgn)。
- 排序之二(快速排序及随机化)
- 快速排序之随机化
- 挖掘算法中的数据结构(三):O(n*logn)排序算法之 快速排序(随机化、二路、三路排序) 及衍生算法
- 快速排序(随机化版本)
- 快速排序(随机化版本)
- 快速排序(二) 随机化——C#实现
- 黑马程序员:快速排序及随机化算法
- 快速排序之随机化版本(7)
- 算法导论之随机化快速排序实现
- 随机化快速排序代码
- 随机化快速排序
- C++随机化快速排序
- 随机化快速排序
- 随机化快速排序
- 随机化快速排序算法
- 快速排序(随机化版本)
- 随机化快速排序算法
- 随机化快速排序
- Java反射机制
- 香八拉 北京 香山 八大处 防火通道
- 先锋论文检测软件,效果很好.2013年10月20日:13
- 微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)
- 项目启动的时候报错:java.lang.IllegalStateException,需要配置webAppRootKey
- 排序之二(快速排序及随机化)
- 游戏禁令解除 中国将成为最大的游戏市场
- leetcode:Remove Duplicates from Sorted List II (留下链表中只出现一次的元素)【面试算法题】
- Linux下用tc控制网络延时和丢包率
- 『HTML5梦幻之旅』-滚动播放的幻灯片效果
- hdu1215
- iOS开发-IOS7自带返回手势问题
- 用HashMap模拟一个网上购物车
- Hibernate中使用分布式缓存ehcache-core-1.3.0