当前位置: 首页 > web >正文

【LeetCode Hot100 | 每日刷题】排序数组

912. 排序数组 - 力扣(LeetCode)

题目:

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

你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。

    示例 1:

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

    示例 2:

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

    方法:快速排序 

    快速排序核心就是分而治之,在当前排序区间[L,R]选定一个元素X作为中间值,X可以是nums[L+1],nums[R-1],nums[(L+R)/2],下面我们选择nums[(L+R)/2]作为中间值,元素依次与X比较,小于X的元素在X左边,大于X的元素在X右边,并且再次递归排序左边的区间以及X右边的区间,直至整个数组完成排序。

    Java实现代码:

    class Solution {public int[] sortArray(int[] nums) {int n=nums.length;quicksort(nums,0,n-1);return nums;}public void quicksort(int []nums,int l,int r){if(l==r)return;int x=nums[(l+r)/2];int i=l-1;int j=r+1;while(i<j){do i++;while(nums[i]<x);do j--;while(nums[j]>x);if(i<j){int tem=nums[i];nums[i]=nums[j];nums[j]=tem;}}quicksort(nums,l,j);quicksort(nums,j+1,r);}
    }

    平均时间复杂度:O(nlogn),最差时间复杂度为O(n^2),即每次取到的X都是当前区间的最大值或最小值,相当于冒泡排序了。

    http://www.xdnf.cn/news/5488.html

    相关文章:

  1. 内存泄露,如何判断是资源泄露还是堆栈泄露?
  2. Telnetlib 库完全指南
  3. MySQL 索引与事务详解
  4. 巧用promise.race实现nrm镜像源切换----nbsl
  5. 冒泡排序的原理
  6. 数据指标和数据标签
  7. 「银河通用」创始人王鹤:人形机器人跳舞是预先编程,马拉松是遥控操作!
  8. C语言文件读写函数详解与示例(fread、fgets、fgetc、fscanf、fwrite、fputs 和 fputc比较)
  9. 专业课复习笔记 5
  10. 可视化赋能电子围栏:开启智能安防新视界
  11. 9.1.领域驱动设计
  12. 大模型应用中常说的Rerank是什么技术?
  13. 第26节:卷积神经网络(CNN)-数据增强技术(PyTorch)
  14. URP - 能量罩实现
  15. Scala 中累加器的创建与使用格式详解
  16. 【面板数据】省级农业及农村现代化指标数据(2011-2022年)
  17. C++初阶-string类的增删的模拟实现
  18. C# 通过ConfigurationManager读写配置文件App.Config
  19. 如何实现并运用责任链模式
  20. 英语时态--中英文对“时间”的不同理解
  21. 抽奖系统-基本-注册
  22. Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计
  23. JVM 监控
  24. 【Java学习笔记】多态
  25. HTML5中的Microdata与历史记录管理详解
  26. 安装typescript时,npm install -g typescript报错
  27. .Net HttpClient 处理响应数据
  28. 每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
  29. 被一个人影响情绪是爱吗?这 3 个真相越早明白越好
  30. AI面经总结-试读