如何解决解释算法使用 Quicksort 中的分区
关于这个算法:
Algo(A,p,r)
if p ≤ r then
q ← Partition(A,r)
if q == r then
return A[q]
else
return Algo(A,q+1,r)
end
end
虽然分区是:
Partition(A,r)
x=A[r]; j=r; i=p-1;
While true
repeat j ← j - 1
until A[j]<x
repeat i ← i +1
until A[i] >= x
if i<j
then A[i] ←→ A[j] % swap
else A[j+1] ←→ A[r]
return j+1
我需要解释一下 Algo 是做什么的。
所以Partition来自Quicksort,处理pivot。
Partition 基本上是返回pivot的索引,然后在Algo中,我们取索引并赋值给q。
我们一直这样做直到q==r,但我不明白Algo到底在做什么,我最好的猜测是它返回数组的Max值,以及像这样的东西的运行时间是多少。
任何帮助都会很棒!
非常感谢!
解决方法
这是 k-smallest 算法(此处为 r-smallest)的 Quickselect 实现。
旨在获取第 k 个统计信息 - 例如,数组/列表 median 按排序顺序作为第 n/2 个元素。
例如,您有长度为 {9,5,3,1,8}
的数据 n=5
。
具有相同元素的排序数组:{1,8,9}
.
中值元素是 5,第 1 小是 1,第 2 小是 3 .. 第 5 小(这里是最大的)是 9。
当然可以对数组进行排序得到A[n/2]
或A[k]
,但是完全排序需要一些资源(时间复杂度为O(nlogn)
)
Quickselect 可以快速解决这个问题,浪费更少的资源(时间复杂度平均为 O(n)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。