排序☞快速排序
public static void quickSort(int[]arr,int left,int right) {
int l =left;//左下标
int r = right;//右下标
int pivot = arr[(left+right)/2];
int temp = 0;//临时变量 作为交换时使用
//while循环的目的是为比pivot 值小放到左边
//比pivot 值大放到右边
while( l< r) {
//在pivot左边一直找 找到大于等于pivot值 才退出
while(arr[l]<pivot) {
l+=1;
}
//在pivot的右边一直找 找到小于等于pivot值 才退出
while(arr[r] >pivot) {
r -=1;
}
//如果l>=r说明pivot的左右两的值 已经按照左边全部是
//小于等于pivot值 右边全部是大于等于pivot值
if(l>=r) {
break;
}
temp = arr[l];
arr[l] = arr[r];
arr[r]= temp;
//如果交换完后 发现arr[l] ==pivot值 相等 前移一步
if(arr[l] == pivot) {
r -=1;
}
//如果交换完后 发现这个arr[r]=pivot相等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);
}
}