CLRS 告诉我们交换A[r]
其中A[i]
i 是 p 和 r 之间的随机变量。但是,如果我要随机选择一个变量作为快速排序函数中的枢轴并交换值,那么现在的时间复杂度是多少?
该算法现在的性能会比书中给出的更差吗?
这是代码
package Clrs;
import java.util.Random;
public class Clrs
{
public static void main(String[] args)
{
int[] a = new int[]{7,6,5,4,3,2,1};
quicksort(a,0,a.length-1);
System.out.println();
for (int i : a) {
System.out.println(i);
}
}
static void quicksort(int a[],int p,int r)
{
int q;
if(p<r)
{
Random random = new Random();
int y = p+random.nextInt(r-p+1);
int temp = a[y];
a[y]=a[r];
a[r]=temp;
q = partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
static int partition(int a[],int p,int r)
{
int x=a[r];
int i=p-1;
for (int j = p; j <= r-1; j++) {
if(a[j]<=x)
{
i++;
swap(a,i,j);
}
}
swap(a,i+1,r);
return i+1;
}
static void swap(int a[],int x,int y)
{
int t=a[x];
a[x]=a[y];
a[y]=t;
}
}