news 2026/5/26 7:30:47

算法-排序-10

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法-排序-10

力扣-真题-排序数组


没啥好说的,排序可以说是最基础的算法题了, 考基本功, 经常面试的笔试题都会让手写 排序。
咱们就从最基础的冒泡排序开始讲。
冒泡排序的 排序逻辑 是 每一次遍历 都把 数组中最大的元素 放在最后。
假如 数组长度是n
那么第一次遍历, 就把数组区间为0~ n-1 的最大数字 放在 n-1 位 (索引从0开始)
第二次 ,就把数组区间为0~ n-2 的最大数字 放在 n -2 位
一直到倒数第二次遍历, 把数组区间在0~ 1 的 最大的数字放在第二位,
此时就已经排好序了。
至于 针对 每一个区间 怎么把 最大的数字 放在最后,比如针对数组区间是0 ~ n -1 , 冒泡排序的方法是, 从0开始遍历到 n-2 , 每一次遍历 ,都让 nums[i] 跟 nums[i+1]对比, 让 大的那个数 占据 nums[i+1],到最后 n-2次遍历, 自然 nums[n-2]就是最大了。

publicint[]sortArray(int[]nums){intn=nums.length-1;// -1是因为其实遍历n-1次就够了for(inti=0;i<n;i++){for(intj=0;j<n-i;j++){if(nums[j]>nums[j+1]){swap(j,j+1,nums);}}}returnnums;}publicvoidswap(intx,inty,int[]nums){inttem=nums[x];nums[x]=nums[y];nums[y]=tem;}

接着就是快速排序。
冒泡排序的 无序区间 是 一点点 减少的。 在数据量有点大的时候, 比如说 100 个数 , 可能需要 比较 接近百万次。
快速排序则采用了 分而治之 的思想, 取 区间 中的第一个数作为基准,
将 区间 划分成两个 更小的区间, 所以 遍历一次, 就能将 100个数字的排序问题, 可能降级两个为 50个 数字 的区间 排序, 然后 再遍历两次 (对两个50区间遍历), 可能就降级为 4 个 25个数字的 区间排序,
随着遍历的继续, 区间数量可能变多, 但是 区间的长度在 断崖式的下降, 8 -》 4 -》 2 -》 1 ,你只要想想 100个数字 一直用冒泡排序 可能需要比较 10000次, 毕竟时间复杂度是O(n^2), 但是在遍历了4次 后最多比较 400次, 加上, 剩下4个 25个数的区间 都用冒泡排序, 一个25区间是 25的平方 225 次, 4次加一起也就 900次比较, 加上400,也就1300次,对比 10000 少了将近 9000次比较。 就可以初见端倪。 更不用说一直用 快速排序 的 分而治之 方法排序。

publicint[]sortArray(int[]nums){sort(0,nums.length-1,nums);returnnums;}publicvoidsort(intleft,intright,int[]nums){if(left>=right)return;// 选择最右边的元素作为基准值intpivot=nums[right];intleftIndex=left;intrightIndex=right-1;while(leftIndex<=rightIndex){// 从左往右找第一个大于等于基准数的数字while(leftIndex<=rightIndex&&nums[leftIndex]<pivot){leftIndex++;}// 从右往左找第一个小于基准数的数字while(leftIndex<=rightIndex&&nums[rightIndex]>pivot){rightIndex--;}// 只有当左指针仍在右指针左侧时才交换if(leftIndex<rightIndex){swap(leftIndex,rightIndex,nums);leftIndex++;rightIndex--;}else{// 退出循环条件break;}}// 将基准值放到正确位置swap(leftIndex,right,nums);// 递归排序左右子数组sort(left,leftIndex-1,nums);sort(leftIndex+1,right,nums);}publicvoidswap(intx,inty,int[]nums){inttemp=nums[x];nums[x]=nums[y];nums[y]=temp;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 23:44:20

AffectNet表情识别数据集终极使用指南

AffectNet表情识别数据集终极使用指南 【免费下载链接】AffectNet数据集资源下载说明 AffectNet数据集是一个专为表情识别研究设计的大规模资源&#xff0c;包含丰富的表情标签&#xff0c;为开发者和研究者提供了宝贵的实验材料。通过简单的网盘下载&#xff0c;您可以快速获取…

作者头像 李华
网站建设 2026/5/26 3:52:08

多智能体协同架构:构建分布式AI交互系统的5个关键技术

多智能体协同架构&#xff1a;构建分布式AI交互系统的5个关键技术 【免费下载链接】CopilotKit Build in-app AI chatbots &#x1f916;, and AI-powered Textareas ✨, into react web apps. 项目地址: https://gitcode.com/GitHub_Trending/co/CopilotKit 在现代应用…

作者头像 李华
网站建设 2026/5/26 4:54:34

K8S-Statefulset控制器

一、Statefulset控制器&#xff1a;概念、原理解读StatefulSet是为了管理有状态服务的问题而设计的。有状态服务StatefulSet是有状态的集合&#xff0c;管理有状态的服务&#xff0c;它所管理的Pod的名称不能随意变化。数据持久化的目录也是不一样&#xff0c;每一个Pod都有自己…

作者头像 李华
网站建设 2026/5/25 23:33:15

NetSonar网络诊断专家:3步搞定专业级网络性能监控

NetSonar网络诊断专家&#xff1a;3步搞定专业级网络性能监控 【免费下载链接】NetSonar Network pings and other utilities 项目地址: https://gitcode.com/gh_mirrors/ne/NetSonar 还在为网络连接不稳定而烦恼吗&#xff1f;&#x1f914; NetSonar作为一款强大的跨平…

作者头像 李华
网站建设 2026/5/25 21:39:32

终极指南:Wan2GP视频生成模型快速入门教程

终极指南&#xff1a;Wan2GP视频生成模型快速入门教程 【免费下载链接】Wan2GP Wan 2.1 for the GPU Poor 项目地址: https://gitcode.com/gh_mirrors/wa/Wan2GP 想要体验专业级视频生成却担心硬件配置不足&#xff1f;Wan2GP正是为你量身打造的解决方案&#xff01;这个…

作者头像 李华
网站建设 2026/5/26 4:56:20

掌握OctoSQL数据流分析:可视化查询执行全流程

掌握OctoSQL数据流分析&#xff1a;可视化查询执行全流程 【免费下载链接】octosql octosql&#xff1a;这是一个SQL查询引擎&#xff0c;它允许您对存储在多个SQL数据库、NoSQL数据库和各种格式的文件中的数据编写标准SQL查询&#xff0c;尝试将尽可能多的工作压缩到源数据库&…

作者头像 李华