思路: 以最左边的数pivot为基础,定义left和right指针分别指向数组的首尾,然后从右边开始向左移动,遇到比小的数,就赋值给左边,接着从左往右移动,遇到比pivot大的数就赋值给右边,直到左右指针重合,把pivot赋值给重合的位置,最后,以基准划分左右两边,递归。
public static void quickSortMethod(int[] arr,int l,int r){
if(l>=r) return ;
int left = l;
int right = r;
int pivot = arr[left];
while (left<right){
//从右开始往左移动下标,直到找到比pivot小的值,赋给pivot左边
while (left<right && arr[right] >=pivot){
right--;
}
if (left<right){
arr[left] = arr[right];
}
//从左开始往右移动下标,直到找到比pivot大的值,赋给pivot右边
while (left<right&&arr[left]<=pivot){
left++;
}
if (left<right){
arr[right] = arr[left];
}
//左右指针重合
if (left>=right){
arr[right] = pivot;
}
}
quickSortMethod(arr,l,right-1);
quickSortMethod(arr,right+1,r);
}