十大排序:选择排序

目录

 

✨排序引言

✨什么是选择排序?

✨思路写法

✨优化方案:


 

✨排序引言

排序是我们日常能够接触到的算法,给数组排个序,让同学们按照身高排个序等等等等诸如此类的排序问题,排序就算将一个有限的数组,按照从小到大或者从大到小的顺序排列,而从小到大的数组我们称为升序数组或者顺序数组,从大到小我们称为降序数组或者逆序数组,而既然要排序,那必然会有各种各样的排序算法,像快速排序,冒泡排序..还有我们这节要讲到的选择排序!事不宜迟,我们开始今天的学习内容吧!


✨什么是选择排序?

选择排序就是每次选择剩余数组中最小值或者最大值,然后排到该剩余数组的最前面,下一个剩余数组长度减一直至找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()函数进行排序呢?其实正如上面所言,在不改变原有的编程思路进行优化,我们学习的是排序的内在核心思想,而不是真的单纯为了排个序!

至于优化方案的代码怎么理解,小伙伴们可以自我进行分析分析以便更好地灵活地掌握!

 

 

篇幅有限~感谢您看到最后,谢谢您的欣赏!

制作不易,如果你在南墙的帖子里学到了一点点东西,那请给南墙一个小小的点赞支持一下吧

 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值