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;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 给你一个整数数组 nums,请你将该数组升序排列。 题目链接 示例 示例1 示例2 题目分析 使用快速排序来...
    唐三斤阅读 167评论 0 0
  • 题目描述: 给你一个整数数组 nums,将该数组升序排列。 上来的第一想法,居然就这么打卡成功了,哈哈哈哈哈哈哈哈...
    小逗比儿阅读 420评论 0 0
  • 难度:★★★☆☆类型:数组方法:二分法 题目 力扣链接请移步本题传送门[https://leetcode-cn.c...
    玖月晴阅读 372评论 0 0
  • 排序数组 题目 给你一个整数数组 nums,请你将该数组升序排列。 示例 1:输入:nums = [5,2,3,1...
    Liori阅读 410评论 0 0
  • 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums = [5,2,3,1]输出:[1,...
    编程小王子AAA阅读 173评论 0 0