原理
根据基准值,找出小于基准值和大于基准值的两个数组,然后排序,采用分而治之的思想
private static void quickSort(int[] arr,int left, int right){if(left>=right){return;}//以第一个元素为初始基准值int low = left;int high = right;int basic = arr[low];System.out.println("basic="+basic);System.out.println("origin arr="+Arrays.toString(arr));while (low<high){//从右边开始移动,直到找到第一小于基准值的数,然后和low进行交换,并开始从左边开始for (;;high--){if(high<=low){break;}if(basic>arr[high]){arr[low] = arr[high];System.out.println("swap high="+high+", arr="+Arrays.toString(arr));break;}}//从左边开始移动,直到找到第一大于基准值的数,然后和high进行交换,并开始从右边开始for (;;low++){if(low>=high){break;}if(basic<arr[low]){arr[high] = arr[low];System.out.println("swap low="+low+", arr="+Arrays.toString(arr));break;}}}//直到low和high碰撞时,这里就是基准值应该在的位置if(arr[low] == arr[high]){arr[low] = basic;System.out.println("一次分区完成,low="+low+", high="+high +", arr="+Arrays.toString(arr));}//分而治之quickSort(arr,left,low-1);quickSort(arr,low+1,right);}public static void main(String[] args) {int[] arr = {6,2,4,9,4,3,6,1};quickSort(arr, 0, arr.length-1);}
