快速排序以及找到第k小的元素

来源:互联网 发布:网上荣誉室源码 编辑:程序博客网 时间:2024/04/30 11:13

快速排序使用分治的思想,对子数组A[p..r]进行快速排序,分3步:

1. 分解:将数组A[p..r]划分成两个子数组A[p ..q-1]和A[ q+1,..,r],使得A[p ..q-1]中的每一个元素均小于等于A[q],

A[ q+1,..,r]中的每个元素均大于等于A[q]。

2. 解决:对子数组A[p,..,q-1]和A[q+1,..,r]进行排序

3. 合并:因为快速排序是原址排序,所以不需要合并操作。

快速排序的运行时间依赖于划分是否平衡,所以这里的排序基于随机抽样,Random_partition随机选一个元素做主元。

最坏情况下,快速排序的时间复杂度是O(n*n),在元素互异的情况下,它的期望时间复杂度是O(nlgn),平均性能很好。

而且它是原址排序。

对于一个数组,要找到第k小的元素,可以在快速排序的基础上修改。


0 0
原创粉丝点击