912. 排序数组

题目

快速排序


讲解

讲解

讲解
class Solution {
    public int[] sortArray(int[] nums) {
        sort(0,nums.length,nums);
        return nums;
    }

    public void sort(int begin, int end, int[] nums) {
        if (end - begin < 2) return;
        int pivot = pivotIndex(begin,end,nums);
        sort(begin,pivot,nums);
        sort(pivot + 1,end,nums);
    }

    private int pivotIndex(int begin, int end, int[] nums) {

        // 随机选择一个元素跟begin位置进行交换 (降低出现最坏排序的概率)
        swap(begin, begin + (int)(Math.random() * (end - begin)),nums);
        int pivot = nums[begin];
        end--;
        while (begin < end) {
            while (begin < end) {
                if (nums[end] <= pivot) {
                    nums[begin++] = nums[end];
                    break;
                } else {
                    end--;
                }
            } 
            while (begin < end) {
                if (nums[begin] >= pivot) {
                    nums[end--] = nums[begin];
                    break;
                } else {
                    begin++;
                }
            }   
        }
        nums[begin] = pivot;
        return begin;
    }

   private void swap(int i1, int i2,int[] nums) {
        int tmp = nums[i1];
        nums[i1] = nums[i2];
        nums[i2] = tmp;
    }

}

推荐阅读更多精彩内容