最简单的排序算法:选择排序法:
在上一次线性查找法来了个算法的开篇,介绍了线性查找法的简单算法,这次继续夯实基础,而排序就是算法中非常基础又非常重要的算法,如题所示,这里先来学习最最简单的排序算法----选择排序。
思想:
它的排序思想比较简单:
过程分析:
对于它的实现其实是有两种,咱们先来看一下这两种的实现过程,基本这块都比较熟了,就当复习巩固。这里以如下整型数组为例进行分析:
实现方案一:借助临时数组
1、找最小的元素:
然后将这个元素放到一个新数据中:
2、从剩下的元素中还是找最小的元素:
将其放到新数组中:
3、继续找最小的元素:
往新数组放:
4、继续找最小的元素:
放:
5、
放:
6、还剩最后一个元素,整个排序完成:
放:
对于这种排序实现可以看出会占用一个额外数组空间:
那有木有一种实现方式不额外申请空间也能达到同样的效果呢?其实在算法中这种思想可以称为“原地排序”,在未来的算法学习中也可以看到很多的算法可以实现原地排序,有些是必须借助额外空间才行的,对于咱们这种算法妥妥的是可以进行原地排序的,下面走起。
实现方案二:不借助临时数组原地排序
还是对于这样一个数组:
1、当前元素为第0个:
接下来从数据元素中找到一个最小的元素,此时得借助另一个下标:
然后这个j会遍历所有元素进行最小值的查找:
此时就找到了数组中最小的那个了,用一个变量记录一下下标:
此时将数组中i位置和minIndex位置中的元素原地进行一下交换:
此时当前下标为i的位置的元素就已经是整个数组中最小的那个元素了,所以:
2、i++再来往后进行处理,i=1:
同样的思路,此时的j扫描位置从i开始: