在递归的这个函数里,如果是>=,就需要把基准位也调换;如果是>,基准位不动;结果正序输出(123456…)
while(l<r){
while(l<r&&arr[r]>=idx) r--;
while(l<r&&arr[l]<=idx) l++;
System.out.println("l: " + l + " r: " + r);
if(l<r)swap(arr,l,r);
}
arr[left] = arr[l];
arr[l] = idx;
如果while里的判断反序,输出结果为倒序(654321…)
while(l<r){
while(l<r&&arr[r]<idx) r--;
while(l<r&&arr[l]>idx) l++;
System.out.println("l: " + l + " r: " + r);
if(l<r)swap(arr,l,r);
}
注意先缩右再缩左
import java.util.*;
public class Main {
public void swap(int[] arr, int a, int b){
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
return ;
}
public void quickSort(int[] arr, int l, int r){
int ll = l, rr = r;
if(l>=r) return ;
int idx = arr[l];
while (l<r){
while(l<r&&idx<arr[r]){
r--;
}
while(l<r&&idx>arr[l]){
l++;
}
if(l<r) swap(arr,l,r);
}
arr[l] = idx;
quickSort(arr,ll,l-1);
quickSort(arr,l+1,rr);
return ;
}
public static void main(String[] args){
//Scanner sc = new Scanner(System.in);
int[] arr = new int[]{4,1,8,5,3,2,9,10,6,7};
Main m = new Main();
m.quickSort(arr,0,9);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+",");
}
}
}