先选取一个基准点base,再分别设置left和right两个指针。
先从右向左寻找,找到比base小的将right处的值赋值给left处。
再从左向右寻找,找到比base大的将left处的值赋值给right处。
直到left位置等于right位置。
此时将base的值赋值给left位置。
再利用递归将已经排好的位置的左边和右边再次排序。
public static void main(String[] args) {
int[] a = {3, 9, 7, 2, 5, 8, 1, 4};
System.out.println(Arrays.toString(a));
sort(a,0,a.length - 1);
System.out.println(Arrays.toString(a));
}
private static void sort(int[] a,int start,int end){
if(start < end){
int base = a[start];
int left = start;
int right = end;
while(left < right){
while(a[right] >= base && left < right){
right--;
}
a[left] = a[right];
while(a[left] <= base && left < right){
left++;
}
a[right] = a[left];
}
a[left] = base;
sort(a,start,left - 1);
sort(a,left + 1,end);
}
}