版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/muzhixi/article/details/88017163
第一种,填坑法:
public static void quicksort(int[] array,int left,int right){
if(left>=right) return;
Random ra=new Random();
int i=ra.nextInt(right-left)+left,j=right;
int[] swap=swap(array[i],array[left]);
array[i]=swap[0];array[left]=swap[1];
int coreElem=array[left];
i=left;
while(i<j){
while(array[j]>coreElem&&i<j){j--;}
if(i<j) {
array[i]=array[j];
i++;
}
while(array[i]<coreElem&&i<j){i++;}
if(i<j){
array[j]=array[i];
j--;
}
}
array[i]=coreElem;
quicksort(array,left,i-1);
quicksort(array,i+1,right);
}
第二种,交换法:
public static int partition(int[] array,int left,int right){
int firstPointer=left,secondPointer=left-1;
Random ra=new Random();
int i=ra.nextInt(right-left)+left;
int[] swap=swap(array[i],array[right]);
array[i]=swap[0];array[right]=swap[1];
while(firstPointer<right){
if(array[firstPointer]<array[right]){
secondPointer++;
if(firstPointer!=secondPointer)
swap=swap(array[firstPointer],array[secondPointer]);
array[firstPointer]=swap[0];array[secondPointer]=swap[1];
}
firstPointer++;
}
array[++secondPointer]=array[right];
return secondPointer;
}
public static void quicksort(int[] array,int left,int right){
if(left>=right) return;
int partitionIndex=partition(array,left,right);
if(partitionIndex>left) quicksort(array,left,partitionIndex-1);
if(partitionIndex<right) quicksort(array,partitionIndex+1,right);
}
另附swap,java中比较简易的swap函数实现:
public static int[] swap(int a,int b){
return new int[]{b,a};
}