/**
* 快速排序法
* 其时间复杂度为O(NlogN)
* @author Sailing
*
*/
public class QuickSort {
static int [] intArray = {9,4,3,7,2,9,1,3,8,5};
public static void quicksort(int left,int right){
//设置递归出口
if(left>right){
return;
}
//假设这个序列 最左端的数为基准数
int temp = intArray[left];
//假想两个'检测者',前面的检测者用于检测不小于基准数数字,如果不满足就一直往后检测,直到满足条件,暂停检测;
//后面的检测者用于检测不大于基准数的数字,如果不满足就一直向前检测,直到满足条件,暂停检测
int i = left;
int j = right;
//只要前后两个移动的 '检测者' 没有相遇,就不会和基准数交换位置
while(i!=j){
while(intArray[j]>=temp&&i<j){
j--;
}
while(intArray[i]<=temp&&i<j){
i++;
}
//只要前后两个移动的 '检测者' 没有相遇,交换此时它们所在的位置的数字
if(i<j){
int t = intArray[i];
intArray[i] = intArray[j];
intArray[j] = t;
}
}
//如果前后两个移动的 '检测者'相遇,此时和基准数交换位置
intArray[left] = intArray[i];
intArray[i] = temp;
//递归接着排序前半部分和后半部分
quicksort(left,i-1);
quicksort(i+1, right);
}
public static void main(String[] args) {
int length = intArray.length;
for(int k=0;k<length;k++){
System.out.print(intArray[k]+" ");
}
System.out.println();
quicksort(0, length-1);
for(int k=0;k<length;k++){
System.out.print(intArray[k]+" ");
}
}
}