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

【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.dtcms.com/a/183769.html

    相关文章:

  1. Python中,async和with结合使用,有什么好处?
  2. Unity 红点系统
  3. 06.three官方示例+编辑器+AI快速学习webgl_animation_skinning_additive_blending
  4. C++23 views::repeat (P2474R2) 深入解析
  5. Redis BigKey 问题是什么
  6. Android Canvas API 详细说明与示例
  7. Android Native 函数 Hook 技术介绍
  8. 飞蛾扑火算法matlab实现
  9. 【leetcode】《BFS扫荡术:如何用广度优搜索征服岛屿问题》
  10. 左右括号的最小处理次数
  11. 深入了解linux系统—— 自定义shell
  12. 《智能网联汽车 自动驾驶功能道路试验方法及要求》 GB/T 44719-2024——解读
  13. ES常识5:主分词器、子字段分词器
  14. Nodejs核心机制
  15. 支持selenium的chrome driver更新到136.0.7103.92
  16. 【Java EE初阶 --- 多线程(初阶)】线程安全问题
  17. 百度AI战略解析:文心一言与自动驾驶的双轮驱动
  18. Hibernate 性能优化:告别慢查询,提升数据库访问性能
  19. 基于 PostgreSQL 的 ABP vNext + ShardingCore 分库分表实战
  20. 使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
  21. 红黑树(C++)
  22. A1062 PAT甲级JAVA题解 Talent and Virtue
  23. 大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等
  24. 【C++】内存管理 —— new 和 delete
  25. D. Explorer Space(dfs+剪枝)
  26. 深入理解深度Q网络DQN:基于python从零实现
  27. 三、c语言练习四题
  28. 前端项目打包部署流程j
  29. 无人机空中物流优化:用 Python 打造高效配送模型
  30. 华为IP(6)