【Leetcode】一、排序

文章目录

  • 1、选择排序
  • 2、冒泡排序
  • 3、插入排序

1、选择排序

给定数组arr,其长度为n。实现思路:

  • 遍历数组,从0 ~ n - 1,找到最小的,找到后,和数组的第一个元素互换位置
  • 继续新一轮遍历,从1 ~ n - 1,找到最小的,找到后,和数组的第二个元素互换位置
  • 再来一轮遍历,从2 ~ n - 1,找到最小的,找到后,和数组的第三个元素互换位置
  • ……
  • 如此,遍历完数组,即可完成排序

核心思路:每次遍历,把剩下的里面最小的元素扔前面去,0到n-1的范围找最小的扔前面,再1到n-1的范围找最小的,以此类推。代码实现:

public class Sort {/*** 选择排序*/public static void selectSort(int[] arr) {// 数组长度为1时,不用排序if (null == arr || arr.length < 2) {return;}for (int i = 0; i < arr.length; i++) {// 最小值的索引,开始i=0int minValueIndex = i;for (int j = i + 1; j < arr.length; j++) {// 如果i的下一个元素比i小,则覆盖最小值索引minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;}// 0 ~ n-1 的范围都比较完了,把最小值的和第一个元素互换int temp = arr[i];arr[i] = arr[minValueIndex];arr[minValueIndex] = temp;// 一轮循环结束,找到了第一小的元素,并放在了数组首位// 接下来开下一轮循环,找第二小的元素,放在数组的第二位}}
}

2、冒泡排序

前面选择排序是,我找到最值后,手动给它放到数组首位。冒泡则是:第n个元素和第n+1个元素对比,交换,让大的那个放右边,接着n+1和n+2位置的元素对比,依旧大的放右边。如此,比较完一轮,就会让第一大的元素像一个气泡一样,一步步的走到了数组末尾的位置。再进行第二轮,第二大的元素也会像一个气泡一样,一步步的走到了数组倒数第二的位置。

在这里插入图片描述
代码实现:


public class Sort {/*** 冒泡排序*/public static void bubbleSort(int[] arr) {// 数组长度为1时,不用排序if (null == arr || arr.length < 2) {return;}for (int end = arr.length - 1; end > 0; end--) {// 设arr.length = n// 外层出循环第一轮,end = n - 1, 先处理0 ~ n-1// 外层循环第二轮,end = n - 2, 先处理0 ~ n-2// 外层循环最后一轮,end = 1, 先处理0 ~ 1for (int i = 0; i < end; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}}}
}

3、插入排序

插入排序,正如这个名字,就像打牌一样,整牌时,比如现在最大的放在左边,那抽到一张新牌后,从右往左看,一个个比较,然后把新进来的牌插入到合适的位置。插入排序也是这个思路。也就是说,实现步骤是:

  • 先保证0 ~ 0 号元素有序(即保证第一张牌有序)
  • 再保证0 ~ 1号元素有序(即保证前两张牌有序)
  • 再保证0 ~ 2号元素有序(即保证前三张牌有序),但前两张已经有序,此时只需处理第三张牌即可
  • ……
  • 保证0 ~ n - 1号元素有序,但前n - 2张已有序,此时只需处理最后一张牌,一个个比,把它插入到合适的位置即可
    在这里插入图片描述

到这儿,想到一点,算法,即解决问题的步骤,把生活中怎么解决同样问题的行为,翻译成代码,就是答案。此外,解一道题,应该先举一个简单具体的例子,分析清楚后,再逐步扩大数据量来分析。

public class Sort {/*** 插入排序*/public static void insertSort(int[] arr) {// 数组长度为1时,不用排序if (null == arr || arr.length < 2) {return;}// 初始end = 1,先保证0~1有序,后面end+1,就是保证0~2有序// end控制末尾的边界for (int end = 1; end < arr.length; end++) {// end - 1 > 0,说明左边还有元素可以比较// arr[end - 1] < arr[end]不满足的话,说明有序,也不用交换int newNumIndex = end;while (newNumIndex - 1 >= 0 && arr[newNumIndex - 1] < arr[newNumIndex]) {int temp = arr[newNumIndex - 1];arr[newNumIndex - 1] = arr[newNumIndex];arr[newNumIndex] = temp;// 交换后,和新的左边的数继续比,直到越界或者遇到比它大的数字,停止比较和交换newNumIndex--;}}}
}

优化下:


public class Sort {/*** 插入排序2* 用for嵌套*/public static void insertSort2(int[] arr) {if (null == arr || arr.length < 2) {return;}// 初始end = 1,先保证0~1有序,后面end+1,就是保证0~2有序// end控制末尾的边界for (int end = 1; end < arr.length; end++) {// pre为当前数的左侧方向的前一个数for (int pre = end - 1; pre >= 0 && arr[pre] < arr[pre + 1]; pre--) {int temp = arr[pre];arr[pre] = arr[pre + 1];arr[pre + 1] = temp;}}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路网双线合并单线——ArcGIS 解决方法

路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义&#xff1a;具有不同流向、不同平面结构的道路。此外&#xff0c;车道数较多的道路&#xff08;例如&#xff0c;双黄实线车道数大于4的道路&#xff09;也可以视为双线路网&#xff0c;本…

扩容升级丨极海正式推出G32A1465系列汽车通用MCU,驱动智驾再进阶

继2023年推出G32A系列汽车通用平台首发产品G32A1445系列后&#xff0c;极海宣布正式推出G32A1465系列全新汽车通用MCU&#xff0c;以满足日益增长的智能驾驶应用需求。作为升级迭代产品&#xff0c;G32A1465专为应用范围不断扩大的高运算要求而设计&#xff0c;集成丰富的通信接…

数据结构(5.2_3)——二叉树的存储结构

二叉树的顺序存储 #define MAXLEN 255struct TreeNode {ElemType value;//结点中的数据元素bool isEmpty;//结点是否为空 };void main() {TreeNode t[MaxSize]; } 定义一个长度为MaxSize的数组t&#xff0c;按照从上至下、从左至右的顺序依次存储完全二叉树中的各个结点 几个…

前端组件化探索与实践:Vue自定义暂无数据组件的开发与应用

摘要 随着前端开发技术的不断进步&#xff0c;组件化开发已成为提升开发效率、降低维护成本的关键手段。本文旨在通过介绍一款Vue自定义暂无数据组件的开发与实践&#xff0c;深入探讨前端组件化开发的重要性、优势及其在实际项目中的应用。 一、引言 在前端开发中&#xff0…

七天打造一套量化交易系统-Day0-量化投资发展历程

七天打造一套量化交易系统-Day0-量化投资发展历程 1、本间宗久&#xff08;1724-1803&#xff09;2、朱尔斯雷格纳特 Jules Regnault&#xff08;1834—1894&#xff09;3、拉尔夫纳尔逊艾略特&#xff08;1871-1948&#xff09;4、爱德华索普(Edward O. Thorp)&#xff08;193…

windows中使用Jenkins打包,部署vue项目完整操作流程

文章目录 1. 下载和安装2. 使用1. 准备一个 新创建 或者 已有的 Vue项目2. git仓库3. 添加Jenkinsfile文件4. 成功示例 1. 下载和安装 网上有许多安装教程,简单罗列几个 Windows系统下Jenkins安装、配置和使用windows安装jenkins 2. 使用 在Jenkins已经安装的基础上,可以开始下…

Element UI DatePicker选择日期范围区间默认显示前一个月和本月

要求&#xff1a;点击el-date-picker选择时间范围时&#xff0c;默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月&#xff0c;如下图所示&#xff1a; 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…

IT产品研发全生命周期【详细说明】

阶段步骤任务负责人产品管理用户故事收集和理解用户需求&#xff0c;创建用户故事产品经理需求分类分类用户故事&#xff0c;组织和优先级排序需求经理可行性分析评估需求的技术可行性与实现难度研发经理需求转换将需求转化为具体的产品特性或功能要求需求经理需求管理创建需求…

Android 视频亮度图标

attrs.xml <?xml version"1.0" encoding"utf-8"?> <resources><!--图标颜色--><attr name"ijkSolid" format"color|reference" /><!--圆角大小--><attr name"ijkRadius" format"d…

防火墙内容安全综合实验

一、实验拓扑 二、实验要求 1&#xff0c;假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件&#xff0c;内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2&#xff0c;我们需要针对办公区用户进行上网行为管理&#xff0c;要…

区块链革命:探索Web3如何重塑数字世界

随着区块链技术的不断发展和应用&#xff0c;Web3作为其重要的应用范式&#xff0c;正以其去中心化、安全和可编程性质&#xff0c;深刻影响和重塑着我们的数字世界。本文将深入探讨Web3的核心概念、关键特征以及其在重塑数字世界中的应用和影响&#xff0c;为读者揭示区块链革…

黑马微服务拆分2 (路由 登录 配置)

会利用微服务网关做请求路由 会利用微服务网关做登录身份校验 会利用Nacos实现统一配置管理 会利用Nacos实现配置热更新 今天粗略的完成了黑马笔记里边的代码实现 其实本身黑马商城的源码就写的逻辑有漏洞&#xff0c;加上对业务没有仔细分析 导致出现的bug调试了很久 这…

【入门】基于DE2-115的My First FPGA 工程

1.1. 概述 这是一个简单的练习&#xff0c; 可以帮助初学者开始了解如何使用Intel Quartus 软件进行 FPGA 开发。 在本章节中&#xff0c;您将学习如何编译 Verilog 代码&#xff0c;进行引脚分配&#xff0c;创建时序约束&#xff0c;然后对 FPGA 进行编程&#xff0c;驱动开…

SpringBoot连接PostgreSQL+MybatisPlus入门案例

项目结构 一、Java代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

打造智慧图书馆:AI视频技术助力图书馆安全与秩序管理

一、背景需求 随着信息技术的飞速发展&#xff0c;图书馆作为重要的知识传播场所&#xff0c;其安全管理也面临着新的挑战。为了确保图书馆内书籍的安全、维护读者的阅读环境以及应对突发事件&#xff0c;TSINGSEE青犀旭帆科技基于EasyCVR视频监控汇聚平台技术与AI视频智能分析…

2024可信数据库发展大会:TDengine CEO 陶建辉谈“做难而正确的事情”

在当前数字经济快速发展的背景下&#xff0c;可信数据库技术日益成为各行业信息化建设的关键支撑点。金融、电信、能源和政务等领域对数据处理和管理的需求不断增加&#xff0c;推动了数据库技术的创新与进步。与此同时&#xff0c;人工智能与数据库的深度融合、搜索与分析型数…

CH04_依赖项属性

第4章&#xff1a;依赖项属性 本章目标 理解依赖项属性理解属性验证 依赖项属性 ​ 属性与事件是.NET抽象模型的核心部分。WPF使用了更高级的依赖项属性&#xff08;Dependency Property&#xff09;功能来替换原来.NET的属性&#xff0c;实现了更高效率的保存机制&#xf…

Android GWP-Asan使用与实现原理

目录 一、 背景 二、GWP-Asan介绍 2.1 什么是GWP-ASan 2.2 GWP-Asan与其他几类工具对比 2.3 GWP-ASan与其它内存分配器的兼容性 三、GWP-Asan如何使用 3.1 app进程 3.2 native进程 四、GWP-Asan实现原理 4.1 进程启用GWP-Asan 4.2 初始化 4.3 内存分配 4.3.1 内存…

【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini

性价比最高的小模型 北京时间7月19日凌晨&#xff0c;美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”&#xff0c;即GPT-4o的更小参数量、简化版本。OpenAI表示&#xff0c;GPT-4o mini是目前功能最强大、性价比最高的小参数模型&#xff0c;性能逼近原版GPT-4&#xff0…

CH01_WPF概述

第1章&#xff1a;WPF概述 本章目标 了解Windows图形演化了解WPF高级API了解分辨率无关性概念了解WPF体系结构了解WPF 4.5 WPF概述 ​ 欢迎使用 Windows Presentation Foundation (WPF) 桌面指南&#xff0c;这是一个与分辨率无关的 UI 框架&#xff0c;使用基于矢量的呈现引…