快速排序(Quicksort)是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
class QuickSort{
public void sort(int[] array) {
int left=0;
int right=array.length-1;
quickSort(array,left,right);
}
private void quickSort(int[] array,int left,int right){
if(right-left<=0){
return ;
}
int middle=part(array,left,right);
quickSort(array,left,middle-1);
quickSort(array,middle+1,right);
}
private int part(int[] array,int left,int right){
int leftPro=left-1;
int rightPro=right;
int result=-1;
while(true){
while(array[++leftPro]<array[right]);
while(rightPro>0 && array[--rightPro]>array[right]);
if(rightPro>leftPro){
int temp=array[rightPro];
array[rightPro]=array[leftPro];
array[leftPro]=temp;
}else{
int temp=array[right];
array[right]=array[leftPro];
array[leftPro]=temp;
result= leftPro;
break;
}
}
return result;
}
}
private static void print(int[] array){
for(int i : array){
System.out.print(i+" ");
}
}
}