【问题标题】:Array that generates best case for quick sort生成快速排序最佳案例的数组
【发布时间】:2022-11-17 21:55:10
【问题描述】:

我正在编写一个 c 程序,我需要在其中制作不同大小(512 到 16384 个元素之间)的数组,这些数组始终生成快速排序的最佳情况。我知道枢轴应该总是在中间,但是在这种情况下,我该如何创建一个创建数字数组的算法呢?在我的分区函数中,我选择最后一个元素作为基准。

我试图根据我在another thread 中找到的回复创建一个函数,但是我对这些数组进行排序所获得的运行时间比我从平均情况下获得的运行时间要长。

【问题讨论】:

  • 这取决于分区函数的细节。基本上,您需要安排枢轴始终是中间值项。但是每次通过都会打乱项目,因此您需要向后工作以找出下一个枢轴最初来自哪里。

标签: c algorithm sorting time-complexity quicksort


【解决方案1】:

假设目标是找到 {0, 1, 2, ..., n-1} 的排列,从而产生最佳快速排序......

编写一个修改后的快速排序,它适用于 struct {int orig_index; int value} 的数组,最初初始化为 {{0, -1}, {1, -1}, {2, -1}, ..., {n-1, -1}} 。当您使用与实际快速排序函数相同的方法(例如:当前范围中的最后一个值)选择一个基准时,分配它的 @ 987654324@ 到当前范围的中间值(即:最佳主元值),然后像往常一样对数组进行分区(使用与实际快速排序函数相同的分区方法),假设前半部分值小于pivot,并且值的后半部分大于 pivot(尽管您可以自由选择哪一半更大,哪一半更大,只要每个元素的数量正确)。最后,您将获得从 0 到 n-1 的值以及它们在原始数组中的位置。

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 2015-08-26
    • 2020-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多