基本思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
public static void quickSort(int[] arr,int start,int end) {
if(start >= end ) {
return ;
}
int l = start;
int r = end;
int target = arr[l];
while(l < r) {
//先从右边开始向左边查找(取决于标尺元素的位置,取左边要从右边开始,取右边要从左边开始)
while(l < r && arr[r] >= target) {
r--;
}
while(l < r && arr[l] <= target) {
l++;
}
if(l < r) {
//交换l和r的元素
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
//位置结束后,把原来开始位置的target 和 交换位置后 l位置进行交换,防止下次重复获取这个数作为标尺
arr[start] = arr[l];
arr[l] = target;
quickSort(arr, start, l-1);
quickSort(arr, l+1, end);
}