基本思想
- 固定一个值,将比其小的放置左边,比其大的放置右边,一轮过后,左右指针相遇,和base交换位置
- 一般base指针为start或者end;
- 每次交换位置是符合条件的位置覆盖对方位置,本身位置right不变,移动对方left位置知道满足条件,覆盖上次不动的right位置; 递归步骤
import java.util.Arrays;
public class TestQuickSort {
public static void main(String[] args) {
int[] arr = new int[]{1,4,5,3,2};
quick_sort(arr,0,arr.length-1) ;
System.out.println(Arrays.toString(arr));
}
private static void quick_sort(int[] arr, int start, int end) {
if(start < end){
// 中间数分割
int base = arr[start];
int l = start ;
int r = end ;
while(l < r){
while(l<r && arr[r]>= base ){
r-- ;
}
//r小于base,r赋给l
arr[l] = arr[r];
//移动l
while(l<r && arr[l] <= base ){
l++;
}
//l大于base,l赋给r
arr[r] = arr[l];
}
//此时l==r ,和base交换位置,base左边的都小于base,右边的都大于
arr[l] = base;
/**
*
* 将左半部分 重复以上步骤
*/
quick_sort(arr, start, l-1) ;
/**
* 将右半部分重复
*/
quick_sort(arr, l+1, end) ;
}
}
}