当前位置: 首页 > 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都是当前区间的最大值或最小值,相当于冒泡排序了。

    相关文章:

  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. 夜读|尊重生命的棱角
  22. 上海北外滩开发建设五周年交出亮眼答卷,未来五年有何新目标?
  23. 马上评丨火车穿村而过多人被撞身亡,亡羊补牢慢不得
  24. 周启鸣加盟同济大学,曾任香港浸会大学深圳研究院院长
  25. 苹果或将于2027年推出由玻璃制成的曲面iPhone
  26. 中方代表团介绍中美经贸高层会谈有关情况:双方一致同意建立中美经贸磋商机制