简介:
1.采用“分治”的思想,对于一组数据,选择一个基准元素,这里选择中间元素mid
2.通过第一轮扫描,比mid小的元素都在mid左边,比mid大的元素都在mid右边
3.然后使用递归排序这两部分,直到序列中所有数据均有序为止。
public class csdnTest {
public static void main(String[] args){
int[] arr = {3,6,7,9,10,20,45,1,-1};
kuaiSuPaiXu(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void kuaiSuPaiXu(int[] arr,int left,int right){
int l = left;//保存左边
int r = right;//保存右边索引
int mid = arr[(left+right)/2];//中间值
int temp = 0;//交换值时的中间变量
while(l<r){
//l>=r说明扫描完毕
while(arr[l]<mid){
//一直扫描到左边有值 大 于中间值或者到达中间值停止
l++;
}
while(arr[r]>mid){
//一直扫描到右边有值 小 于中间值或者到达中间值停止
r--;
}
if(l>=r){
break;
}
//扫描完毕交换左右两边的值
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//交换完成后左值等于中间值,说明扫描完毕
if (arr[l]==mid){
r--;
}
if (arr[r]==mid){
l++;
}
}//while
//防止栈溢出
if(l==r){
r--;
l++;
}//if
//左递归
if(left<r){
kuaiSuPaiXu(arr,left,r);
}//if
//右递归
if(right>l){
kuaiSuPaiXu(arr,l,right);
}
}//KuaiPaiXu
}
结果: