这是快速排序算法的一部分代码,但我真的不知道为什么它使用rand() %n
请帮助我谢谢
Swap(V,0,rand() %n) // move pivot elem to V[0]
答案 0 :(得分:2)
它用于随机化快速排序以实现平均nlgn时间复杂度。
从维基百科引用:
是什么让随机枢轴成为一个不错的选择?
假设我们对列表进行排序然后 将其分为四个部分。他们俩 中间的部分将包含 最佳枢纽;他们每个都更大 比至少25%的元素和 小于至少25%的 元素。如果我们能够始终如一 从这两个中选择一个元素 中间部分,我们只需要 将列表最多拆分2log2n次 在达到1号列表之前, 产生算法。
答案 1 :(得分:0)
快速排序的平均时间复杂度为O(nlog(n)),但最差情况复杂度为n ^ 2(当数组已经排序时)。所以要使其随机选择O(nlog(n))pivot,所以rand()%n生成0到n-1之间的随机索引。