思想

选择排序思想:

第一次从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博客

选择排序两层遍历的目的相关推荐

  1. 【数据结构-排序】3.图解选择排序两种实现(简单选择排序/堆排序)

    简单选择排序(选择排序) 排序思想 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 以此类推,直到所有元素 ...

  2. 二维数组的冒泡/选择排序(两种实现方法)

    一.思路 1.降维排序 一种思路是先将二维数组转化为一维数组,再利用一维数组的排序算法进行排序,最后转换回二维数组. 2.指针运算 另一种思路是直接对二维数组进行排序,利用二维数组在内存中是顺序排放的 ...

  3. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  4. 都是❤️两层循环❤️的冒泡排序,选择排序,插入排序该怎么区分

    目录 冒泡排序 选择排序 插入排序 这三个排序都有两层循环这是他们表面的特点,我把外部循环叫大循环,内部循环叫小循环,他们算法根本思想都有相同点,就是将待排序序列分为无序区间和有序区间,每过一次大循环 ...

  5. 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...

  6. ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️

    目录 主要排序算法性能对比 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快速排序 Hoare版 挖坑版 前后指针法 归并排序 计数排序 海量数据的排序问题 主要排序算法性能对比 冒泡排序 各位同学 ...

  7. 选择排序(升序排序)对无序序列进行排序

    目录 代码思路 代码实现 代码思路: 选择排序:每次遍历选出最大的:最小的 :然后进行交换,打的放在最后小的放在前面 第一步 : 输入无序的数字然后传入数组当中,在传入函数进行排序: 第一次循环: 初 ...

  8. 【排序算法】图解简单选择排序(图解堪比Debug显示每次循环结果)

    [排序算法]图解简单选择排序(图解堪比Debug分析每次循环结果) 写在前面: 本文主要介绍简单选择排序算法,通过图片一步步解释每一趟每一次的后移.代码通过C#实现,并输出每一次交换的情况和比较次数, ...

  9. 链表选择排序算法功能实现演示

    算法: 狭义的算法是与数据的存数方式密切相关 广义的算法是与数据的存储方式无关 泛型: 利用某种技术达到的效果就是:不同的存数方式,执行的操作是一样的 #include <stdio.h> ...

最新文章

  1. JAVA_OA(六):SpringMVC登陆实例
  2. 在线考试计算机文化基础,计算机文化基础在线考试.pdf
  3. 不错的递归题:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串。
  4. matlab计算斜方差_计算一幅图像的信噪比
  5. 用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香
  6. 畅享9能更新鸿蒙吗,Mate 9也能升级!鸿蒙系统正式发布:老用户爽了
  7. java opc 读取到数据块的数据_MES系统功能数据传输的介绍
  8. 鸿蒙战略看点,鸿蒙OS四大看点详解!华为的野心不止手机,而是“一统江湖”...
  9. h5 video 手机 显示第一帧_【图像处理二】HDMI显示(一)
  10. C语言int的字节数跟什么有关,C语言中int型字长和什么有关
  11. eplan图纸怎么发给别人_手机拍的照片怎么打包发给别人
  12. 通过Console口本地加载系统程序
  13. java日期减去天数得日期_Java日期添加天数,减去天数,日历
  14. 无所不能的『十五郎』向您致敬!!!
  15. D - 昂贵的聘礼(最短路径)
  16. flowable 配置自定义表单_SpringBootSecurity学习(03)网页版登录添加自定义登录页面...
  17. 基于STM32CUBE MX 的TM1640的使用例程
  18. OpenGL基础48:高度贴图(上)
  19. 骗访问量的机房人物列传by xMinh
  20. Crashing Balloon

热门文章

  1. 磁盘结构非常详细的介绍
  2. 云服务器如何清理垃圾释放空间?
  3. linux配置svn 报错,linux配置svn全过程及问题解决方案
  4. java 存储输入_java将用户输入信息保存至txt文件
  5. python string转date类型_java string类型怎么转化成date类型
  6. js截图插件_WordPress外贸网站插件装多了很卡很卡?别慌,试试这招
  7. 进阶 09 Map集合
  8. MATLAB说文本命令超过,MATLAB基础
  9. idea中ssm集成freemark_基于SSM框架的迷你天猫商城
  10. python中tile的用法_Python:numpy中的tile函数