algorithm - 快速排序中的随机改组如何帮助提高代码效率?

标签 algorithm sorting shuffle

我正在观看 Robert Sedgwick 关于算法的讲座视频,他解释说随机改组确保我们不会在快速排序中遇到最坏的二次时间场景。但我无法理解。

最佳答案

这确实是一种承认,虽然我们经常谈论平均案例复杂度,但实际上我们并不期望每个案例都以相同的概率出现。

对一个已经排序的数组进行排序是快速排序中最糟糕的情况,因为每当你选择一个主元时,你会发现所有元素都被放置在主元的同一侧,所以你根本不会分成大致相等的两半.通常在实践中,这种已经分类的情况会比其他情况更频繁地出现。

首先随机打乱数据是一种快速的方法,可以确保您确实最终以相同的概率出现所有情况,因此这种最坏的情况与其他情况一样罕见。

值得注意的是,还有其他策略可以很好地处理已排序的数据,例如选择中间元素作为基准。

关于algorithm - 快速排序中的随机改组如何帮助提高代码效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645471/

相关文章:

php - 按另一个数组的键对一个数组进行排序

c++ - 如何使快速排序算法中已排序数组的交换次数为零?

swift - 索引后随机排列数组

在 N 个桶中平均分配一组随机整数的算法

java - 第 K 个元素 N*N 和 vector

arrays - 将插入排序伪代码转换为运行 Java 代码

php - 以同样的方式打乱2个php数组

algorithm - N位整数匹配算法

arrays - 设计一个使用散列并支持比较的数据结构

c++ - 如何确保 std::random_shuffle 总是产生不同的结果?