目录
✨排序引言
排序是我们日常能够接触到的算法,给数组排个序,让同学们按照身高排个序等等等等诸如此类的排序问题,排序就算将一个有限的数组,按照从小到大或者从大到小的顺序排列,而从小到大的数组我们称为升序数组或者顺序数组,从大到小我们称为降序数组或者逆序数组,而既然要排序,那必然会有各种各样的排序算法,像快速排序,冒泡排序..还有我们这节要讲到的选择排序!事不宜迟,我们开始今天的学习内容吧!
✨什么是选择排序?
选择排序就是每次选择剩余数组中最小值或者最大值,然后排到该剩余数组的最前面,下一个剩余数组长度减一直至找n次最小值或者最大值!这就是选择排序!
选择排序很简单,简单到在排序算法中是最没用的,但是为什么它还需要去学习呢?时间复杂度比不过,空间复杂度也比不过,但是,它代表着一个思想的开始,单单凭这点也值得学习!
话说回来,什么是选择排序呢?这样吧,我先给你一个数组!
arr = [3, 2, 4, 1, 5]
你第一时间是想到怎样的排序方法呢?
南墙:我有一计!每次我都选择最小值或者最大值不就好啦~
小伙伴:听起来很聪明...不知道效果怎么样!
那我们就写一下这个代码吧~
✨思路写法
data = [int(i) for i in input().split()]
for i in range(len(data)):
num_min = data[i]
z = i
for j in range(i + 1, len(data)):
if num_min > data[j]:
num_min = data[j]
z = j
data[i], data[z] = data[z], data[i]
print(data)
我们先接收数据输入(不理解可以看上一篇,前备知识篇),然后我们再给个for循环,代表我们要操作n次,每次操作是怎样的呢?看代码可以知道,先定义目前最小值num_min为data[i],即目前值是最小值,还有目前最小值得下标,再再给个for遍历后面的中最小的值并且与目前最小值比较,若比目前最小值小,就更新最小值,并且更新最小值下标以便交换,反复如此直至遍历原始数组,得到新数组。
我们可以看到,虽然思想简单,但是写起来并不是很简短的代码,所以该排序算法是最没用的!
那么我们是否能对这段代码进行优化(不改变原有的算法思路)呢?
✨优化方案:
使用内置函数min()来代替for循环!
data, arr = [int(i) for i in input().split()], []
for i in range(len(data)):
t = min(data)
arr.append(t)
del data[data.index(t)]
print(arr)
小伙伴可能会有疑问,既然都使用内置函数了,为什么不直接使用sort()函数进行排序呢?其实正如上面所言,在不改变原有的编程思路进行优化,我们学习的是排序的内在核心思想,而不是真的单纯为了排个序!
至于优化方案的代码怎么理解,小伙伴们可以自我进行分析分析以便更好地灵活地掌握!
篇幅有限~感谢您看到最后,谢谢您的欣赏!
制作不易,如果你在南墙的帖子里学到了一点点东西,那请给南墙一个小小的点赞支持一下吧!