package 排序;
/**
* 快速排序<br/>
* <ul>
* <li>从数列中挑出一个元素(这里取第一个数),称为“基准”</li>
* <li>重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面。在这个分割之后,
* 该基准是它的最后位置。这个称为分割(partition)操作。</li>
* <li>从右边开始找,再左边</li>
* <li>递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。</li>
* </ul>
*/
public class Kuaisu {
public static void main(String[] args) {
int[] arr= {1,9,5,3,4,6,2,7,8};
sort(arr,0,arr.length-1);
for(int i:arr) {
System.out.print(i+" ");
}
}
public static void sort(int[] arr,int low,int high) {
if(arr==null||arr.length==0||low>high) {
return ;
}
int i,j,temp,t;
i=low;
j=high;
//temp就是基准位
temp=arr[low];
while(i<j){
//先看右边,依次往左递减,包括相等
while(arr[j]>=temp&&i<j) {
j--;
}
//再看右边,依次往右递增,包括相等
while(arr[i]<=temp&&i<j) {
i++;
}
//如果满足条件则交换
if(i<j) {
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
//最后将基准位i和j相等位置的数字交换
arr[low]=arr[i];
arr[i]=temp;
//递归调用左半数组
sort(arr, low, j-1);
//递归调用右半数组
sort(arr, j+1, high);
}
}