快速排序与随机化快排运行速度实验比较

本文通过实验比较了快速排序和随机化快速排序在不同计算机配置、初始序列及数据量下的性能。实验结果显示,随机化快排在数据量达到5千万至1亿时,对于有序序列的排序效率优于确定性快排。在不同配置的计算机上,随机化快排也表现出更好的稳定性。同时,数据量的增大导致单次运算相对于多次运算平均值的波动加剧。
摘要由CSDN通过智能技术生成

目录

快速排序与随机化快速排序. 2

快速排序. 2

随机化快速排序. 3

快排与随机化快排性能分析. 4

不同配置的计算机运算效果. 4

不同初始序列对快速排序的影响. 7

数据相对于其多运算的平均值的波动. 11

总结. 13

问题与不足. 13

参考文献. 13


快速排序与随机化快速排序

计算机科学数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定排序方式进行排列的一种算法。最常用到的排序方式是数值顺序以及字典顺序。有效的排序算法在一些算法(例如搜索算法合并算法)中是重要的,如此这些算法才能得到正确解答。排序算法也用在处理文字数据以及产生人类可读的输出结果。基本上,排序算法的输出必须遵守下列两个原则:

1、       输出结果为递增序列(递增是针对所需的排序顺序而言)

2、       输出结果是原输入的一种排列、或是重组

虽然排序算法是一个简单的问题,但是在计算机数据处理上发挥了很大的作用,从计算机科学发展以来,在此问题上也已经有大量的研究。[1]

快速排序

快速排序用到了分治思想,同样的还有归并排序。乍看起来快速排序和归并排序非常相似,都是将问题变小,先排序子串,最后合并。不同的是快速排序在划分子问题的时候经过多一步处理,将划分的两组数据划分为一大一小,这样在最后合并的时候就不必像归并排序那样再进行比较。但也正因为如此,划分的不定性使得快速排序的时间复杂度并不稳定。[2]

快速排序的期望复杂度是O(nlogn),但最坏情况下可能就会变成O(n^2),最坏情况就是每次将一组数据划分为两组的时候,分界线都选在了边界上,使得划分了和没划分一样,最后就变成了普通的选择排序了。

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。

步骤为:

1、从数列中挑出一个元素,称为"基准"(pivot),

2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。[3]

 

选定基准:最后一个元素。


排序分区:


递归:


随机化快速排序

当输入序列为有序时,快排的时间复杂度最大,效率最低,为了使快排在任何序列中,效率始终处于最优,引入随机化的思想。随机化即是随机地选择主元,使其运行时间不依赖于输入序列的顺序。

经分析, 随机化快排的算法效率是Θ(nlgn)。

实现:我们只需在选取主元时加入随机因素即可。其他与快排一样。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值