Leetcode No.912 排序数组

Posted AI算法攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode No.912 排序数组相关的知识,希望对你有一定的参考价值。

一、题目描述

给你一个整数数组 nums,请你将该数组升序排列。

示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]

示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

提示:

1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000

二、解题思路

快速排序的主要思想是通过划分将待排序的序列分成前后两部分,其中前一部分的数据都比后一部分的数据要小,然后再递归调用函数对两部分的序列分别进行快速排序,以此使整个序列达到有序。

我们定义函数 randomized_quicksort(nums, left, right) 为对 nums 数组里[left,right]的部分进行排序,每次先调用 randomized_partition 函数对 nums 数组里 [left,right] 的部分进行划分,并返回分界值的下标 pos,然后按上述将的递归调用 

randomized_quicksort(nums, left, pos - 1) 

和 randomized_quicksort(nums, pos + 1, right) 即可。

那么核心就是划分函数的实现了,划分函数一开始需要确定一个分界值(我们称之为主元 pivot),然后再进行划分。而主元的选取有很多种方式,这里我们采用随机的方式,对当前划分区间 [left,right] 里的数等概率随机一个作为我们的主元,再将主元放到区间末尾,进行划分。

整个划分函数 partitio

以上是关于Leetcode No.912 排序数组的主要内容,如果未能解决你的问题,请参考以下文章

leetCode 第35题,搜索插入位置

三指针(三指针排序只有三种元素的数组)--12--三指针--颜色分类

leetcode300-每日刷题档

LeetCode692. 前K个高频单词 / 剑指 Offer 50. 第一个只出现一次的字符 / 剑指 Offer 51. 数组中的逆序对 / 2. 两数相加

LeetCode 热题 HOT 100

三数之和