【问题标题】:How can you guarantee quicksort will sort an array of integers?你如何保证快速排序会对整数数组进行排序?
【发布时间】:2012-02-27 21:36:36
【问题描述】:

在一次讲座中被问到这个问题……有点难过。

如何保证快速排序总是对整数数组进行排序?

谢谢。

【问题讨论】:

  • 您的意思是“如何证明快速排序有效?”?
  • 检查不变量是否成立
  • 这是什么意思?您的意思是“为什么快速排序可以正常工作”或“您需要进行哪些更改才能确保始终正确排序整数?”
  • 您的意思是“如何证明快速排序有效?”?我相信这是我寻求的答案。

标签: arrays algorithm quicksort integer


【解决方案1】:

无偿抄袭Wikipedia

划分算法的正确性基于以下几点 两个论点:

  • 在每次迭代中,到目前为止处理的所有元素 处于所需位置:如果小于枢轴的位置,则在枢轴之前 值,如果大于枢轴的值,则在枢轴之后(循环 不变)。
  • 每次迭代都会少处理一个元素 (循环变体)。

可以证明整体算法的正确性 通过归纳:对于零个或一个元素,算法留下数据 不变;对于更大的数据集,它会产生两个连接 部分,小于枢轴的元素和大于它的元素, 它们按递归假设排序。

【讨论】:

    【解决方案2】:

    快速排序功能通过获取一个枢轴值,并将剩余的数据分为两组。一高一低。然后,您依次对每个组执行此操作,直到获得不超过一个的组。此时,您可以保证数据已排序,因为您可以保证任何枢轴值都在正确的位置,因为您直接将它与另一个枢轴值进行了比较,该枢轴值也在正确的位置。最后,您会留下大小为 1 或大小为 0 的集合,它们无法排序,因为它们无法重新排列,因此已经排序。

    希望这会有所帮助,这是 A Level 进阶数学(16-18 岁,英国)所教的内容。

    【讨论】:

      【解决方案3】:

      您的教授可能指的是“稳定性”。看看这里:http://en.wikipedia.org/wiki/Stable_sort#Stability。稳定的排序算法保持具有相同键的记录的相对顺序。如果所有的键都不同,那么这种区别就没有必要了。

      快速排序(在有效的实现中)不是一种稳定的排序,因此保证稳定性的一种方法是确保数组中没有重复的整数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-18
        • 2016-09-25
        • 1970-01-01
        • 2017-04-02
        相关资源
        最近更新 更多