力扣—912. 排序数组

ops/2024/11/29 17:03:51/

912. 排序数组

题目:

给你一个整数数组 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]

提示:

  • 1 <= nums.length <= 5 * 104
  • -5 * 104 <= nums[i] <= 5 * 104

整体思路:快速排序

以第一个元素为基准值,从第一个元素开始与基准值比较

1如果大于基准值:将元素与第--j(因为j在所有元素最后面)个交换

2如果小于基准值:将元素与第++i(因为i在所有元素最前面)个交换

3相等就直接去比较下一个元素

   5,2,3,1

i  L                R  j

代码:

class Solution {
public:void Quick(vector<int> &arr,int L, int R) {if(L >= R) return;//递归结束条件int i = L - 1;//i在所有元素最前面int j = R + 1;//j在所有元素最后面int index = L;//从第一个元素开始比较int temp = arr[L];//以第一个元素最为基准值while(index < j){//如果index和j在同一位置结束循环if(arr[index] > temp) swap(arr[--j], arr[index]);//1else if(arr[index] < temp) swap(arr[++i], arr[index]);//2else index++;//3}//此时以基准值为中心,基准值前面都是比基准值小的,基准值后面都是比基准值大的//但是这两部分内部还没有排好序,所以递归将两边再排好Quick(arr, L, i);//比基准值小的部分Quick(arr, j, R);//比基准值大的部分}vector<int> sortArray(vector<int>& nums){if(nums.size() == 1) return nums;//长度等于1就不用排了直接输出即可Quick(nums, 0, nums.size() - 1);//调用函数进行快排return nums;//返回排好的数组}
};


http://www.ppmy.cn/ops/137692.html

相关文章

git: 修改gitlab仓库提交地址

git: 修改gitlab仓库提交地址 右键git bash here 1、进入到项目my-project所在位置 2、查看当前项目远程仓库地址 3、修改远程仓库地址 4、再次查看新的远程仓库地址以确认修改成功 cd /my-project git remote -v # 查看当前远程仓库地址 git remote set-url origin 新的Gi…

springboot项目报错问题总结

springboot循环依赖问题处理 发现问题 Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-11-27 21:30:58.695 [f8cd6df4693e404aa607363bbe3dcf00] [main] ERROR o.s.boot.SpringApplication - - App…

结构型模式-装饰器模式

装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;主要用于动态地给对象添加一些额外的职责&#xff0c;而无需修改其代码。通过将对象放入包含行为的装饰器对象中&#xff0c;能够有效地扩展功能&#xff0c;同时保持原始类的结构和代码完…

从单机缓存到分布式缓存那些事

作者&#xff1a;秦怀 1 缓存前世今生 1.1 故事从硬件开始 Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义&#xff0c;用于电脑工程领域。当时没有 Cache&#xff0c;CPU 和内存都很慢&#xff0c;CPU 直接访…

【超详细】卷积神经网络CNN基本架构以及工作原理详解

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

限制账号密码格式的正则表达式来啦

. 代表任意字符 \w 代表字母、数字、下划线 \d 代表数字 指定字符重复1次或者n次&#xff0c;最少1次 ? 指定字符重复0-1次 {n} 只能重复n次 {a,} 最少重复a次 {,a} 最多重复a次 {a,b} 最少重复a次&#xff0c;最多重复b次 \s 空格 | 代表或者 [a-zA-Z0-9]&#xf…

Fanuc法那科机器人维修之参考位置详解

参考位置是预先设定好的一个或多个特定点位&#xff0c;当启用这一功能时&#xff0c;系统会实时且精确地判断机器人的当前关节角度是否处于预设参考位置的一定范围之内&#xff08;这个范围区间是可以根据实际需求进行设置的&#xff09;&#xff0c;并据此输出指定的信号。 这…

【设计模式】【结构型模式(Structural Patterns)】之外观模式(Facade Pattern)

1. 设计模式原理说明 外观模式&#xff08;Facade Pattern&#xff09; 是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。通过隐藏子系统的复杂…