微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解释算法使用 Quicksort 中的分区

如何解决解释算法使用 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 举报,一经查实,本站将立刻删除。