package aaa;
/**
*
* @author GodTong
* fuction:快速排序算法
*/
public class Quick {
public static void main(String []args){
// 首先,定义一个数组
int[] a = {12,20,5,16,15,1,30,45,23,9};
// i是数组第一个下表,j是最后一个下标
int i = 0;
int j = a.length-1;
// 递归调用sort方法,进行排序
sort(a,i,j);
// 数组的遍历输出,\t是制表符,占8位
for(int l = 0; l<a.length; l++){
System.out.print(a[l]+"\t");
}
}
public static void sort(int[] a,int i,int j){
int start = i;
int end = j;
// 先将第一个数赋值给key
int key = a[i];
while(end>start){
//先从后往前比较
//如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
while(end>start&&a[end]>=key)
end--;
if(a[end]<=key){
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//从前往后比较
//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
while(end>start&&a[start]<=key)
start++;
if(a[start]>=key){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
//此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
}
//递归
if(start>i) sort(a,i,start-1);//左边序列。第一个索引位置到关键值索引-1
if(end<j) sort(a,end+1,j);//右边序列。从关键值索引+1到最后一个
}
}