不了解的或者有更好方法的欢迎讨论
话不多说,代码奉上:
public class QuickSort {
public static void main(String[] args){
//int[] num={1,7,3,88,44,151,88,36,17};
int[] num={6,88,1,4,83,54,64,19,22};
for(int i:num)
System.out.printf("%d ",i);
System.out.println();
quicksort(num);
for(int i:num)
System.out.printf("%d ",i);
}
public static void quicksort(int[] num){
if(num!=null)
quicksort(num,0,num.length-1);
}
private static void quicksort(int[] num, int beg, int end) {
if(beg<end){
int p=Partition(num,beg,end); //得出排序一次后标志数的下标
quicksort(num,beg,p-1);
quicksort(num,p+1,end);
}
}
private static int Partition(int[] num, int beg, int end) {
int i=beg+1,j=end;
int tag=num[beg]; //以第一个数为标志数
if(beg<end){
while(true){
while(num[i]<=tag&&i<end) //从左开始找到一个比tag大的数
i++;
while(num[j]>tag&&j>beg) //从右开始找到一个比tag小的数
j--;
if(i>=j)
break;
//用异或将num[i]和num[j]交换
num[i]=num[i]^num[j];
num[j]=num[i]^num[j]; //i^j^j=i 此时num[j]就是原num[i]的值
num[i]=num[i]^num[j]; //i^j^i=j
}
//将num[j]和num[beg]交换
num[beg]=num[j];
num[j]=tag;
}
return j;
}
}