/**
* 快速排序:是对冒泡排序的改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
* 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
*
* 找出a[0]放置的位置(也就是两部分的中间)
*/
public class QuickSort {
int arr[] ={2,1,5,4,8,23,20,2443,2342,343342,9000,22,4,54,3,20000};
public static void main(String[] args) {
QuickSort qs=new QuickSort();
int low=0; //固定为0
int high=qs.arr.length-1; //数组的长度-1
qs.quickSort(low, high);
for(int i=0;i<qs.arr.length;i++){
System.out.print(qs.arr[i]+" ");
}
}
/**
* 找出两部分分隔点
* @param low 固定值0
* @param high
* @return
*/
int mid(int low,int high){
int val=arr[low];
while(low<high){
while(low<high && val<=arr[high])
high--;
arr[low]=arr[high];
while(low<high && val>=arr[low])//注意>与>=区别,为什么此处arr[low]与arr[high]会产生不一样的结果?
low++;
arr[high]=arr[low];
}
arr[low]=val;
return low;
}
/**
* 快速排序算法
* @param low
* @param high
*/
void quickSort(int low,int high){
if(low<high){//如果没有low<high,java.lang.StackOverflowError
int middle=mid(low, high);//(1)数组右边的比左边的大,两部分中间点middle
quickSort(low,middle);
quickSort(middle+1,high);
}
}
}