入门算法学习,看的第一本是深入浅出的《算法图解》一书,本博客是对《算法图解》一书的学习笔记,将书中的分享的算法示例用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),这在其他博客讲解。