【算法图解】 之 [选择排序] 详解

入门算法学习,看的第一本是深入浅出的《算法图解》一书,本博客是对《算法图解》一书的学习笔记,将书中的分享的算法示例用Python3语言实现。
如果你也想要阅读这本书,百度云盘链接:https://pan.baidu.com/s/1s967vfgEBd1vSrfwVI9Y3g 提取码:【be9k】
或者也可以留言你的邮箱,我将PDF共享给你~

选择排序

  • 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

选择排序原理

假设你的计算机存储了很多乐曲。对于每个乐队,你都记录了其作品被播放的次数。
在这里插入图片描述
你要将这个列表按播放次数从多到少的顺序排列,从而将你喜欢的乐队排序。该如何做呢?
一种办法是遍历这个列表,找出作品播放次数最多的乐队,并将该乐队添加到一个新列表中。
在这里插入图片描述
在这里插入图片描述

选择排序–案例

案例:将一个数组元素按从小到大的顺序排列。

def FindSmallest(li):
	"""获取列表最小值索引下标"""
    smallest = li[0]             # 存储最小值
    smallest_index = 0           # 存储最小值的的下标

    for i in range(len(li)):     
        if li[i] < smallest:
            smallest = li[i]
            smallest_index = i
    return smallest_index


def SelectinonSort(li):
	"""选择排序"""
    new_li = []

    for i in range(len(li)):
        smallest_index = FindSmallest(li)      # 获取最小值下标
        new_li.append(li.pop(smallest_index))  # 将最小值加入到新的列表中

    return new_li                              # 返回新的排好序的列表


order_list = [9, 5, 3, 7, 8]
out_list = SelectinonSort(order_list)
print(out_list)

---------------
[3, 5, 7, 8, 9]

运行时间

下面从计算机科学的角度出发,看看这需要多长时间。别忘了,O(n)时间意味着查看列表中的每个元素一次。例如,对乐队列表进行简单查找时,意味着每个乐队都要查看一次。
在这里插入图片描述
要找出播放次数最多的乐队,必须检查列表中的每个元素。正如你刚才看到的,这需要的时间为O(n)。因此对于这种时间为O(n)的操作,你需要执行n次。
在这里插入图片描述
需要的总时间为 O(n × n),即O(n^2)。
选择排序是一种灵巧的算法,但其速度不是很快。快速排序是一种更快的排序算法,其运行时间为O(n log n),这在其他博客讲解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值