1. package sort;
    2. import java.util.Arrays;
    3. import java.util.stream.Collectors;
    4. public class QuickSort {
    5. public void solution(int[] arr){
    6. int n = arr.length;
    7. if(n<=1){
    8. return;
    9. }
    10. quicksort(arr, 0, n-1);
    11. }
    12. public void quicksort(int[] arr, int low, int high){
    13. if(low >= high){
    14. return;
    15. }
    16. // 把数组分成2份,
    17. // 左边的值比 arr[pivotIndex] 小
    18. // 右边的值比 arr[pivotIndex] 大
    19. int pivotIndex = partition(arr, low, high);
    20. quicksort(arr, low, pivotIndex-1);
    21. quicksort(arr, pivotIndex+1, high);
    22. }
    23. /**
    24. * 算法思想:
    25. * 在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边
    26. * 下次,再对分组后对每一组,按同样对方式进行
    27. */
    28. public int partition(int[] arr, int low, int high){
    29. int pivot = arr[low];
    30. while (low < high){
    31. // 从右往左,找出比 pivot 小的元素的下标
    32. while (low < high && arr[high] >= pivot){
    33. high--;
    34. }
    35. // 将比pivot小的,交换到low的位置
    36. arr[low] = arr[high];
    37. // 从左往右,找出比 pivot 大的元素的下标
    38. while (low < high && arr[low] <= pivot){
    39. low++;
    40. }
    41. arr[high] = arr[low];
    42. }
    43. arr[low] = pivot;
    44. return low;
    45. }
    46. public static void main(String[] args) {
    47. int []arr = {8,5,9,12,4,1,3};
    48. QuickSort quickSort = new QuickSort();
    49. quickSort.solution(arr);
    50. System.out.println(Arrays.stream(arr).boxed().collect(Collectors.toList()));
    51. }
    52. }