关于模数运算符的用法

时间:2010-06-08 07:07:48

标签: java data-structures

这是快速排序算法的一部分代码,但我真的不知道为什么它使用rand() %n请帮助我谢谢

Swap(V,0,rand() %n)  // move pivot elem to V[0]

2 个答案:

答案 0 :(得分:2)

它用于随机化快速排序以实现平均nlgn时间复杂度。

从维基百科引用:

  

是什么让随机枢轴成为一个不错的选择?

     

假设我们对列表进行排序然后   将其分为四个部分。他们俩   中间的部分将包含   最佳枢纽;他们每个都更大   比至少25%的元素和   小于至少25%的   元素。如果我们能够始终如一   从这两个中选择一个元素   中间部分,我们只需要   将列表最多拆分2log2n次   在达到1号列表之前,   产生算法。

答案 1 :(得分:0)

快速排序的平均时间复杂度为O(nlog(n)),但最差情况复杂度为n ^ 2(当数组已经排序时)。所以要使其随机选择O(nlog(n))pivot,所以rand()%n生成0到n-1之间的随机索引。