难度:Medium

题目:

给你一个整数数组 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 <= 5 * 104
  • -5 * 104 <= nums[i] <= 5 * 104

Related Topics

  • 数组
  • 分治
  • 桶排序
  • 计数排序
  • 基数排序
  • 排序
  • 堆(优先队列)
  • 归并排序

 重点!!!解题思路

第一步:

明确解题思路:使用排序来解决此题,模仿c++中的STL的快速排序思想来解决此题

第二步:

我们使用一个快速排序来对待排序数组进行分区

最后分区以后使用一个插入排序来进行最后的调整

源码+解析:

class Solution {public int[] sortArray(int[] nums) {quick_sort(nums,0,nums.length-1); //执行快速排序,传入参数return nums;}public void quick_sort(int[] nums,int l,int r){  __quick_sort(nums,l,r);  //接收参数进行快速排序final_insert_sort(nums,l,r);  //最后收尾进行插入排序}public void __quick_sort(int[] nums,int l,int r){while (r-l>16){  //模仿STL的快速排序,当待排序数组长度大于16时进行操作int i=l,j=r,m=median(nums[l],nums[r],nums[(l+r)/2]); //找到一个中间值,这个值不要求非常准确,只需要保证它不是最大值,也不是最小值即可do {while (nums[i]<m) i++;while (nums[j]>m) j--;if (i<=j){   //执行到这步相当于num[i]>m,num[j]<m 说明顺序不对,需要换一下swap(nums,i,j);i++;j--;}}while (i<=j);__quick_sort(nums,i,r);  //这步很重要,思想为单边递归,右面进行递归,左面进行循环r=j;  //这步其实相当于__quick_sort(nums,l,j) 虽说是相当于 但实际不进行递归操作,进行循环操作加快程序运行速度}}public void final_insert_sort(int[] nums,int l,int r){ //插入算法同理int ind=l;for (int i=l+1;i<=r;i++){  //我们先确nums中的最小值,这样我们待排序数组的有序区间就增加了,可以保证排序后的正确性,减少了程序的运行次数,优化插入排序的性能if (nums[i]<nums[ind]){ind=i;}}while (ind>l){swap(nums,ind,ind-1);ind--;}for (int i=l+2;i<=r;i++){  //因为第一个位置已经确定是最小值int j=i;while (nums[j]<nums[j-1]){swap(nums,j,j-1);j--;}}}public void swap(int[] nums,int l,int r){int t=nums[l];nums[l]=nums[r];nums[r]=t;}public int median(int a,int b,int c){int max=Math.max(a,Math.max(b,c));int min=Math.min(a,Math.min(b,c));if (a!=max && a!=min) return a;if (b!=max && b!=min) return b;return c;}}

运行结果:

系列持续更新中,喜欢练习算法的那就点个攒吧 

LeetCode[912]排序数组相关推荐

  1. Leetcode 912.排序数组(Sort an Array)

    Leetcode 912.排序数组 1 题目描述(Leetcode题目链接)   给定一个整数数组 nums,将该数组升序排列. 输入:[5,2,3,1] 输出:[1,2,3,5] 输入:[5,1,1 ...

  2. Leetcode.912 排序数组

    题目链接 Leetcode.912 排序数组 mid 题目描述 给你一个整数数组 n u m s nums nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出: ...

  3. LeetCode 912. 排序数组(Java)

    912. 排序数组 你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 提示: 1 <= nums.length &l ...

  4. LeetCode 912. 排序数组【模板题】

    912. 排序数组 [快排] class Solution {// 快速排序 7:32 13void quickSort(int[] nums, int l, int r){if(l >= r) ...

  5. LeetCode 912. 排序数组(10种排序)

    文章目录 1. 题目 2. 解题 2.1 插入排序 2.2 冒泡排序 2.3 选择排序 2.4 希尔排序 2.5 归并排序 2.6 快速排序 2.7 堆排序 2.8 计数排序 2.9 桶排序 2.10 ...

  6. 2022-4-9 Leetcode 912.排序数组

    第一版,使用库函数 `class Solution {public:vector<int> sortArray(vector<int>& nums) {sort(num ...

  7. [leetcode] 912.排序数组

    给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0 ...

  8. LeetCode 912. 排序数组-快排(C++)

    本题是华为一面手撕题目. 快排的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程 ...

  9. LeetCode删除排序数组中的重复项(Java实现)

    原题: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件 ...

最新文章

  1. java urlrewriter_java url重写技术(UrlReWriter)
  2. 十天精通CSS3(3)
  3. 使用Elastic Job的namespace配置,防止任务名称的冲突
  4. python编写爬虫的步骤-零基础写python爬虫之爬虫编写全记录
  5. wsl遇到问题The repository ‘http://ppa.launchpad.net/ubuntu-desktop/ubuntu-make/ubuntu focal Release‘解决方法
  6. 随堂小测app冲刺(三)
  7. [ZZ]Debug VBScript with Visual Studio
  8. 向上传文件服务器,向服务器上传文件
  9. java 定义多个变量_学了Java才搞懂JMeter测试计划
  10. mysql xplugin_MySQL 5.7.12版本发布,更重要的是X Plugin也来了
  11. 小红书编辑器_为什么我建议你用小红书打造个人IP?
  12. 超级炫酷个人引导页自适应HTML源码
  13. 软件工程实验报告1-可行性分析
  14. 学习笔记61—兴趣阅读之经济学
  15. 关于assert im_orig.shape[2] == 3, 3ch image is expected
  16. http://fonts.googleapis.com/css?打开很慢解决方案
  17. N叉树的所有路径搜索
  18. JavaScript history对象(back()、forward()、go())
  19. 再仔细读读react18官方文档吧 20220526
  20. iQOO新机发布,vivo开启多品牌之路

热门文章

  1. html发光loading,Canvas 制作炫酷发光loading动画
  2. C语言:猴子吃桃问题详解(while循环)
  3. Mac下载Halcon
  4. [计算机图形学]几何:曲线和曲面(前瞻预习/复习回顾)
  5. 清华源安装pymysql
  6. mac和linux都能识别的u盘格式化,在终端使用Mac diskutil 命令格式化顽固U盘
  7. DC-DC直流升压模块线性可调负电压输出稳压电源5v12v24v48v转-50V-80V-100V-200V-220V-250V-300V-500V-1000V
  8. 十二栋文化获近亿元 B 轮融资,险峰旗云独投
  9. 2021-2027全球与中国C型USB充电器市场现状及未来发展趋势
  10. VUE翻书效果(turn.js,仿真折角过渡)