选择排序两层遍历的目的
思想
选择排序思想:
第一次从arr[0]~ arr[n-1]中选取最小值,与arr[0]交换,
第二次从arr[1]到 arr[n-1]中选取最小值,与arr[1]交换,
第三次从arr[2]到arr[n-1]中选取最小值,与arr[2]交换, .,
第i次从arr[i-1]^ arr[n-1]中选取最小值,与arr[i-1]交换,.,
第n-1次从arr[n-2]到 arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
python 实现
内层比较,找出最小值,并记录其索引,为什么要记录索引? 因为交换的时候只能根据下标,或者说索引
,如果找到最小值没有记住其索引,如何实现交换呢?
为何外层循环是从0到n-1?
因为数组的长度就是这样
为何内层循环是从i+1到n-1?
因为小于i的已经排好序了
为什么min_idx的值会变化?
因为内层每次遍历未排序的部分,最小值是会变化的.随着未排序部分的数组越来越短,未排序部分的最小值的索引是不一样的.
a = [2, 40, 74, 10, 60, 50]
n = len(a)for i in range(n):min_idx = i # 最小值索引for j in range(i + 1, n): # 从未排序的部分找出最小值,并记住其索引if a[j] < a[min_idx]:min_idx = ja[i], a[min_idx] = a[min_idx], a[i] # 最小值与已排序好的交换位置print(a) # [2, 10, 40, 50, 60, 74]
外层遍历是为了找到每次遍历的起始位置
,在每次遍历结束用于存放每次找到的极值,但是在里层遍历过程中只记录其下标,而后利用交换将最值放置在数组首部或者尾部。
比较
比较对象时当前最小值与未排序部分的每个值
交换
将找到的最小值放到已排序部分的最后, <=> 交换最小值与内层遍历的起始位置
总结
- 要明白交换了什么, 比较了什么
参考
排序算法入门——选择排序_zhen921的博客-CSDN博客
选择排序两层遍历的目的相关推荐
- 【数据结构-排序】3.图解选择排序两种实现(简单选择排序/堆排序)
简单选择排序(选择排序) 排序思想 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 以此类推,直到所有元素 ...
- 二维数组的冒泡/选择排序(两种实现方法)
一.思路 1.降维排序 一种思路是先将二维数组转化为一维数组,再利用一维数组的排序算法进行排序,最后转换回二维数组. 2.指针运算 另一种思路是直接对二维数组进行排序,利用二维数组在内存中是顺序排放的 ...
- 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...
- 都是❤️两层循环❤️的冒泡排序,选择排序,插入排序该怎么区分
目录 冒泡排序 选择排序 插入排序 这三个排序都有两层循环这是他们表面的特点,我把外部循环叫大循环,内部循环叫小循环,他们算法根本思想都有相同点,就是将待排序序列分为无序区间和有序区间,每过一次大循环 ...
- 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析
排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...
- ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️
目录 主要排序算法性能对比 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快速排序 Hoare版 挖坑版 前后指针法 归并排序 计数排序 海量数据的排序问题 主要排序算法性能对比 冒泡排序 各位同学 ...
- 选择排序(升序排序)对无序序列进行排序
目录 代码思路 代码实现 代码思路: 选择排序:每次遍历选出最大的:最小的 :然后进行交换,打的放在最后小的放在前面 第一步 : 输入无序的数字然后传入数组当中,在传入函数进行排序: 第一次循环: 初 ...
- 【排序算法】图解简单选择排序(图解堪比Debug显示每次循环结果)
[排序算法]图解简单选择排序(图解堪比Debug分析每次循环结果) 写在前面: 本文主要介绍简单选择排序算法,通过图片一步步解释每一趟每一次的后移.代码通过C#实现,并输出每一次交换的情况和比较次数, ...
- 链表选择排序算法功能实现演示
算法: 狭义的算法是与数据的存数方式密切相关 广义的算法是与数据的存储方式无关 泛型: 利用某种技术达到的效果就是:不同的存数方式,执行的操作是一样的 #include <stdio.h> ...
最新文章
- JAVA_OA(六):SpringMVC登陆实例
- 在线考试计算机文化基础,计算机文化基础在线考试.pdf
- 不错的递归题:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串。
- matlab计算斜方差_计算一幅图像的信噪比
- 用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香
- 畅享9能更新鸿蒙吗,Mate 9也能升级!鸿蒙系统正式发布:老用户爽了
- java opc 读取到数据块的数据_MES系统功能数据传输的介绍
- 鸿蒙战略看点,鸿蒙OS四大看点详解!华为的野心不止手机,而是“一统江湖”...
- h5 video 手机 显示第一帧_【图像处理二】HDMI显示(一)
- C语言int的字节数跟什么有关,C语言中int型字长和什么有关
- eplan图纸怎么发给别人_手机拍的照片怎么打包发给别人
- 通过Console口本地加载系统程序
- java日期减去天数得日期_Java日期添加天数,减去天数,日历
- 无所不能的『十五郎』向您致敬!!!
- D - 昂贵的聘礼(最短路径)
- flowable 配置自定义表单_SpringBootSecurity学习(03)网页版登录添加自定义登录页面...
- 基于STM32CUBE MX 的TM1640的使用例程
- OpenGL基础48:高度贴图(上)
- 骗访问量的机房人物列传by xMinh
- Crashing Balloon
热门文章
- 磁盘结构非常详细的介绍
- 云服务器如何清理垃圾释放空间?
- linux配置svn 报错,linux配置svn全过程及问题解决方案
- java 存储输入_java将用户输入信息保存至txt文件
- python string转date类型_java string类型怎么转化成date类型
- js截图插件_WordPress外贸网站插件装多了很卡很卡?别慌,试试这招
- 进阶 09 Map集合
- MATLAB说文本命令超过,MATLAB基础
- idea中ssm集成freemark_基于SSM框架的迷你天猫商城
- python中tile的用法_Python:numpy中的tile函数