我编写了以下代码以进行快速排序,并且对于唯一数字似乎做得很好。
但是,当存在重复项时,它会惨遭失败。
帮助进行重复调整表示赞赏:
class QuickSort{
public static void sort(int left,int right,int[] data){
if(right-left <= 0) return;
int pivot=organize(left,right,data);
sort(left,pivot-1,data);
sort(pivot,right,data);
}
private static int organize(int left,int right,int[] data){
int _right=right;
int _left=left;
int pivot=(left+right)%2==0?(left+right)/2:(left+right+1)/2;
//Move the pivot to the extreme right.
int pivotval=data[pivot];
swap(pivot,right,data);
left=left-1;//to adjust teh stating pointer
while(true){
while(right > 0 && data[--right]>pivotval);
while(data[++left]<pivotval);
if(right<=left) break;
swap(left,right,data);
}
swap(left,_right,data);
return left;
}
private static void swap(int left,int right,int[] data){
int temp=data[right];
data[right]=data[left];
data[left]=temp;
}
public static void main(String[] args){
int N=Integer.parseInt(args[0]);
int[] data=new int[N];
Random r=new Random();
for(int i=0 ;i<N;i++)
data[i]=r.nextInt(N);
//After populating the array
QuickSort.sort(0,data.length-1,data);
}
}