首页 > 编程语言 >算法绘本-选择排序

算法绘本-选择排序

时间:2024-04-04 16:34:04浏览次数:27  
标签:遍历 数字 绘本 所以 位置 最小值 更新 算法 排序

选择排序也是一种比较简单的排序方式,其原理是在给定的一系列值中,首先找出最小的值放在第一位,然后在剩下的值中找出最小的值放在第二位,以此类推,直到剩下的值只有一个的时候,则完成了排序。
下面看一个例子,假设给定一组数字3,2,8,2,4,9,1

image.png
首先是第一轮,假设第一个数字3为最小值,记录下它的位置

image.png
然后从第二个数字2开始往后遍历

image.png
因为2比3小,所以更新最小值的位置为2的位置,然后往后遍历

image.png
因为2比8小,所以不用更新最小值的位置,继续往后遍历

image.png
因为2不比2大,所以不用更新最小值的位置,继续往后遍历

image.png
因为2比4小,所以不用更新最小值的位置,继续往后遍历

image.png
因为2比9小,所以不用更新最小值的位置,继续往后遍历

image.png
因为2比1大,所以更新最小值的位置为1的位置

image.png
这个时候遍历到头了,然后将最小值的位置和这一系列值的第一个交换位置

image.png
这个时候第一轮结束了,第一个位置就是找到的最小值
接下来开始第二轮的比较,第二轮假定第二个数字2为最小值

image.png
然后从第三个数字8开始遍历

image.png
因为2比8小,所以不用更新最小值的位置,继续遍历

image.png
因为2不比2小,所以不用更新最小值的位置,继续遍历

image.png
因为2小于4,所以不用更新最小值的位置,继续遍历

image.png
因为2小于9,所以不用更新最小值的位置,继续遍历

image.png
因为2小于3,所以不用更新最小值的位置,这时候遍历到头了,所以这一轮最小值就是2

image.png
接下来开始第三轮,第三轮首先假设第三个数字8为最小值

image.png
从8后面的2开始遍历

image.png
因为2比8小,所以更新最小值的位置为2的位置,继续往后遍历

image.png
因为2比4小,所以不用更新最小值的位置,继续遍历

image.png
因为2比9小,所以不用更新最小值的位置,继续遍历

image.png
因为2比3小,所以不用更新最小值的位置,这时候遍历到头了,找到了第三大数字,第三轮结束

image.png
然后开始第四轮,第四轮假设第四个数字8为最小值

image.png
从第五个数字4开始遍历

image.png
因为4比8小,所以更新最小值的位置为4的位置,继续遍历

image.png
因为4比9小,所以不需要更新最小值的位置,继续遍历

image.png
因为3比4小,所以需要更新最小值的位置为3的位置

image.png
这一轮遍历结束,交换数字3和数字8的位置,这样前4个数字就排好序了

image.png
接下来开始第五轮,首先假定第五个数字4为最小值的位置

image.png
从第六个数字9开始往后遍历

image.png
因为4比9小,所以不需要更新最小值的位置,继续遍历

image.png
因为4比8小,所以不需要更新最小值的位置,遍历到头了,所以数字4是这一轮最小值

image.png
然后开始最后一轮处理,假定第六个数字9为最小值所在的位置

image.png
从第七个数字8开始遍历

image.png
因为8比9小,所以需要更新最小值的位置为8的位置,遍历到头了

image.png
将8的位置和数字9的位置交换

image.png
数字9后面没有值了,所以无需再遍历比较了,所有的数字已经排好序了,整个排序过程结束。

那么,选择排序是不是稳定的呢?
答案是不是的,举个例子

image.png
对于上面这一组数字,第一轮结束的时候,第一个数字2和最后一个数字1会交换位置,那么就会导致原始数字中两个2的顺序和排序后两个2的顺序不一样,所以选择排序是不稳定的。

总结

  • 选择排序的最坏的时间复杂度为O(N^2),空间复杂度为O(1)
  • 选择排序是不稳定的,在排序的过程中,有可能改变原有的相同值的顺序

标签:遍历,数字,绘本,所以,位置,最小值,更新,算法,排序
From: https://blog.csdn.net/u012972427/article/details/137323379

相关文章

  • 算法 哈希表 day03
    哈希表当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。牺牲了空间换取了时间当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。数组set(集合)map(映射)第一题:242.有效的字母异位词-力扣(LeetCode)//暴力publicstaticboo......
  • 操作系统综合题之“采用时间片轮转调度算法(Round-Robin,RR)执行,分时系统中的进程可能出
    一、问题:某分时系统中的进程可能出现下图所示的状态变化,请回答下列问题:1.根据图示,您认为该系统采用的是什么进程调度策略?2.把图中所示的每一个状态变化的原因填在下表相应位置。变化原因1 2 3 4 5 6 二、参考答案答:1.时间片轮转调度......
  • 【信号处理】基于期望最大化算法EM的最大似然递归状态估计附matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 锂电池算法学习集合---基于matlab/simulink的电池参数辨识、充放电、SOC估计算法。
    整理了锂电池的多种算法合集:涵盖电动汽车Simulink模型、电动汽车动力电池SOC估算模型、动力电池及电池管理系统BMS。电动汽车动力电池SOC估算模型含有:电池参数辨识模型、电池的充放电数据、电池手册、卡尔曼滤波电池SOC文献、卡尔曼滤波算法的锂电池SOC估算模型。电池参数辨......
  • 欧几里得算法求解GCD
    GCD(最大公约数)欧几里得算法(辗转相除法)原理if(a%b==0)GCD=belseGCD=b%(a%b)基本情况:如果其中一个数为0,则另一个非零数一定就是两数的GC......
  • manacher算法
    回文串的性质回文串类似于ABA,ABCBA,AABBAA等的对于i具有s[i]=s[n+!-i]的字符串。回文半径:对于一个回文中心i,如果它的半径为r,如果它为奇数长度的回文串的中心,则说明[i+r+1,i+r-1]为一个回文串。如果i是偶数长度的回文中心,则回文半径没有意义。(Manacher算法会解决这个问题)它会......
  • 代码随想录算法训练营第二十一天| 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的
    530.二叉搜索树的最小绝对差https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/TreeNodepre=null;intres=Integer.MAX_VALUE;publicintgetMinimumDifference(TreeNoderoot){if(root==null)return0;pr......
  • 【算法】BFS、并查集和拓扑排序
    最近刷到了两道关于图论很有意思的题目()。做法颇有相似之处,因此记录一下吧AcWing2069.网络分析标签:dfs、并查集题目描述题目大意是,有一个\(n\)个顶点的网络,初始状态图中没有边。有两种操作:操作1将节点\(a\)和节点\(b\)连接起来;操作2使节点\(p\)的值加\(t\),\(t\)值会沿着网......
  • 代码随想录算法训练营第一天 | 数组 704.二分查找 27.移除元素
    leetcode704.二分查找题目704.二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。解题思路代码实现本题对自己的难点有大概的解题思路,但是代码实现有几个点写不出来1、怎么取......
  • React之Diff 算法
    在React中,通过React.createElement也能生成一个虚拟DOM节点(ReactElement)。在React15及以前,采用了递归的方式创建虚拟DOM,递归过程是不能中断的。如果组件树的层级很深,递归会占用线程很多时间,造成卡顿。React16将递归的无法中断的更新重构为异步的可中断更新,推出了新的......