news 2026/5/11 8:55:08

选择排序--自学笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
选择排序--自学笔记

选择排序

学习目标:

1.选择排序的基本思想

2.二元选择排序

3.冒泡排序和选择排序的异同

4.复杂度分析

1.选择排序的基本思想

1.1基本思想

双重循环遍历数组,每经过一轮比较,找到最小或最大元素的下标,将其换至首位!

经过六轮选择,完成排序

1.2代码实现

publicstaticvoidselectSort(int[]arr){intminIndex;intlen=arr.length;for(inti=0;i<len-1;i++){minIndex=i;for(intj=i+1;j<len;j++){if(arr[j]<arr[minIndex]){minIndex=j;}}swap(arr,i,minIndex);}}

2.二元选择排序

2.1 二元选择排序的思想

既然一次选择中要找出最小值,何不把最大值也找出来

2.2 代码实现

publicstaticvoidselectSort(int[]arr){intminIndex,maxIndex;intlen=arr.length;for(inti=0;i<len-1;i++){minIndex=i;maxIndex=i;//每轮最末尾 i 位 已有序for(intj=i+1;j<len-i;j++){if(arr[j]<arr[minIndex]){minIndex=j;}if(arr[j]>arr[maxIndex]){maxIndex=j;}}//min == max 说明所有元素相等 提前退出if(minIndex==maxIndex)break;swap(arr,i,minIndex);//当前数组的末尾下标 len - 1 - i//特殊情况:此时maxIndex == i//而 i 刚刚与 minIndex 互换//更新为 maxIndex = minIndexif(maxIndex==i)maxIndex=minIndex;swap(arr,len-1-i,maxIndex);}}

3.冒泡排序和选择排序的异同

3.1 相同点

1.都是两层循环,时间复杂度为O(n2)

2.都只使用有限个变量,空间复杂度为O(1)

3.2 不同点

1.冒泡排序在比较过程中不断交换

2.选择排序增加一个变量保存最小值/最大值的下标,遍历完成后才交换,

减少了交换的次数

*3.冒泡排序是稳定的,而选择排序是不稳定的

3.3 排序算法的稳定性

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,

若经过排序,这些记录的相对次序保持不变,即

在原序列中,r[i] = r[j] ,且r[i] 在 r[j] 之前,而在排序后的序列中,

r[i] 仍在 r[j] 之前,相对顺序依然不变,

则称这种排序算法是稳定的;

否则称为不稳定的

3.4 什么情况下要用的排序算法的稳定性?

将要排序的内容是一个对象的多个属性,

且其原本的顺序存在意义,

如果要在二次排序后保持原有排序的意义,

则需要用到稳定性

4.复杂度分析

1.时间复杂度:O(n2)

2.空间复杂度:O(1)

215. 数组中的第K个最大元素 - 力扣(LeetCode)

2.空间复杂度:O(1)

215. 数组中的第K个最大元素 - 力扣(LeetCode)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 8:54:45

开发改了接口,经常忘通知测试,有什么好的解决方案吗?

不知道大家有没有同感&#xff0c;做接口测试麻烦的不是测试本身&#xff0c;而是接口它会变&#xff0c;更麻烦的不是接口变了&#xff0c;而是它变了而你不知道。等到你测完&#xff0c;开发才悠悠跟你说 ——“那个接口我改了点东西&#xff0c;你再看一眼哈”。 我那是看一…

作者头像 李华
网站建设 2026/5/8 5:19:53

掌握这4个VSCode Azure QDK项目模板,轻松迈入量子编程大门

第一章&#xff1a;掌握VSCode Azure QDK项目模板的意义使用 Visual Studio Code&#xff08;VSCode&#xff09;结合 Azure Quantum Development Kit&#xff08;QDK&#xff09;为量子计算开发提供了高效、集成的环境。通过预设的项目模板&#xff0c;开发者能够快速初始化符…

作者头像 李华
网站建设 2026/5/9 21:05:54

Blender Launcher:彻底解决多版本管理难题的智能方案

Blender Launcher&#xff1a;彻底解决多版本管理难题的智能方案 【免费下载链接】Blender-Launcher Standalone client for managing official builds of Blender 3D 项目地址: https://gitcode.com/gh_mirrors/bl/Blender-Launcher 在3D创作和开发工作中&#xff0c;B…

作者头像 李华
网站建设 2026/5/9 11:37:50

服装公司ERP软件的特点是什么?

服装公司ERP软件的主要功能分析 服装公司ERP软件具备多个核心功能&#xff0c;帮助企业提升管理效率。其中&#xff0c;订单管理是最重要的功能之一&#xff0c;能够实现全流程透明化&#xff0c;从下单到交货&#xff0c;确保每一个环节都能及时追踪。此外&#xff0c;库存控制…

作者头像 李华
网站建设 2026/5/10 12:32:40

27、Linux 系统操作与故障排除全攻略

Linux 系统操作与故障排除全攻略 软件卸载与依赖处理 有时我们会尝试卸载一些软件包,例如使用 rpm -e glibc 命令来卸载 glibc 包。不过要注意, glibc 是帮助部分程序运行的必需包,这里只是作为示例。当执行卸载命令后,如果看到错误提示说该包是满足依赖关系所必需…

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

Iceberg 在hadoop大数据数据湖领域这么火

Iceberg 在hadoop大数据数据湖领域这么火建议由CDH迁移到CMP 7.13 平台&#xff08;类Cloudera CDP7.3&#xff0c;如华为鲲鹏 ARM 版&#xff09;可以做到无缝切换平缓迁移Apache Iceberg 在 Hadoop 大数据和数据湖领域“爆火”&#xff0c;并非偶然&#xff0c;而是因为它精准…

作者头像 李华