package sort;import java.util.Arrays;import java.util.stream.Collectors;public class QuickSort { public void solution(int[] arr){ int n = arr.length; if(n<=1){ return; } quicksort(arr, 0, n-1); } public void quicksort(int[] arr, int low, int high){ if(low >= high){ return; } // 把数组分成2份, // 左边的值比 arr[pivotIndex] 小 // 右边的值比 arr[pivotIndex] 大 int pivotIndex = partition(arr, low, high); quicksort(arr, low, pivotIndex-1); quicksort(arr, pivotIndex+1, high); } /** * 算法思想: * 在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边 * 下次,再对分组后对每一组,按同样对方式进行 */ public int partition(int[] arr, int low, int high){ int pivot = arr[low]; while (low < high){ // 从右往左,找出比 pivot 小的元素的下标 while (low < high && arr[high] >= pivot){ high--; } // 将比pivot小的,交换到low的位置 arr[low] = arr[high]; // 从左往右,找出比 pivot 大的元素的下标 while (low < high && arr[low] <= pivot){ low++; } arr[high] = arr[low]; } arr[low] = pivot; return low; } public static void main(String[] args) { int []arr = {8,5,9,12,4,1,3}; QuickSort quickSort = new QuickSort(); quickSort.solution(arr); System.out.println(Arrays.stream(arr).boxed().collect(Collectors.toList())); }}