对冒泡排序的改进,选择其中一个数,让这个数左侧都比这个数小,右侧都比这个数大,在按此方式分组
package sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {0,23,-567,-70,50,70,-1};
quickSort(arr,0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int left,int right){
int l = left;
int r = right;
int pivot = arr[(l+r)/2];//中间值
int temp = 0;
//让比中间小的在左边
while (l < r){
//在中间左边一直找,找到大于等于中间值得才退出
while (arr[l] pivot){
r -= 1;
}
//左边全部小于等于中间值
if (l >= r){
break;
}
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//交换完后,发现左面值等于中间值,r--
if (arr[l] == pivot){
r -= 1;
}
//交换后,右面值等于l++
if (arr[r] == pivot){
l += 1;
}
}
//如果l=r 必须人l++,r--,否则栈溢出
if (l == r){
l += 1;
r -= 1;
}
//向左地柜
if (left < r){
quickSort(arr,left,r);
}
//向右递归
if (right > l){
quickSort(arr,l,right);
}
}
}



