news 2026/5/12 14:19:53

选择排序--自学笔记

作者头像

张小明

前端开发工程师

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/10 23:24:45

光线追踪纹理内存优化:从性能瓶颈到渲染加速的实战指南

当你在运行复杂光线追踪场景时&#xff0c;是否经历过画面卡顿、内存占用飙升的困扰&#xff1f;特别是在渲染包含多个高分辨率纹理的场景时&#xff0c;程序可能因内存溢出而崩溃。本文将通过raytracing.github.io项目中的真实案例&#xff0c;深入剖析纹理内存优化的核心技术…

作者头像 李华
网站建设 2026/5/12 7:48:20

29、Linux命令与安装DVD使用指南

Linux命令与安装DVD使用指南 1. 常见Linux命令概述 对于计算机新手而言,Linux专家在键盘上的熟练操作常常令人惊叹。尽管他们也了解鼠标和图形界面等现代技术,但更倾向于使用键盘,因为这样能提高工作效率。其实,每个专家都曾是新手,只要深入学习各种命令并多加练习,新手…

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

掌握这7个VSCode调试技巧,轻松驾驭量子机器学习项目

第一章&#xff1a;量子机器学习的 VSCode 调试面板在开发量子机器学习应用时&#xff0c;调试是确保算法逻辑正确与性能优化的关键环节。Visual Studio Code&#xff08;VSCode&#xff09;凭借其强大的扩展生态&#xff0c;成为量子计算开发者首选的集成开发环境。通过安装 Q…

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

量子模拟器扩展的VSCode性能瓶颈:90%开发者忽略的3个关键问题

第一章&#xff1a;量子模拟器扩展的 VSCode 性能瓶颈概述在开发量子计算应用时&#xff0c;Visual Studio Code&#xff08;VSCode&#xff09;凭借其丰富的插件生态和轻量级架构成为主流选择。然而&#xff0c;当集成量子模拟器扩展&#xff08;如 Q#、Quantum Development K…

作者头像 李华