谢谢大家对小白的支持,上周更新的冒泡排序,几个点赞也是莫大的鼓励,很开心有朋友留言,说还想看选择排序和堆排序。
最近在博客的评论区认识了一些并肩奋战的小伙伴,有朋友说每天都来看我的博客,也有朋友认真实现我的代码后及时指出错误,有朋友也会和我分享他的面经 说是回报我一直的分享~ 这些都是我最初的最初没想过、也没想到的。今天,第一次粉丝数量超越了原创数量,评论区也多了很多交流和鼓励,不再是我一个人不停的写不停的学。我就是很开心,起初自己写给自己的博客,竟然发挥着一点点的影响力,认真的付出被大家认真的对待。嘻嘻,谢谢你们。
不要煽情了,说一说选择排序。
1.1 实现过程
以 [3,5,4,2,1]
从小到大排序,看看选择排序实现的中间步骤。
1.2 关键思路
和冒泡排序一样,简单选择排序也是一轮一轮的,每一轮排好一个最值的位置,再不断缩小比较范围。
每一轮中,
- 设定基准(本例中,以比较范围内,第一个元素为基准);
- 更新最小值下标;
- 交换基准与最值的位置(本例中,是选取最小值)。
这样,每一轮结束后,最小值都被往前排。
下一轮,则缩小范围,对未排序的区域重复以上过程。
1.3 代码实现
def SelectSort(arr):
n = len(arr)
for i in range(0, n):
min_index = i # 设定基准
for j in range(i+1, n):
if arr[j] <= arr[min_index]:
min_index = j #更新最小值下标
arr[i], arr[min_index] = arr[min_index], arr[i] # 交换基准与最值的位置
return arr
1.4 结合代码和中间过程,再次体会
1.5 评价
-
每轮操作O(n)次,共O(n)轮,时间复杂度O(n^2)。
-
额外空间开销出在交换数据时那一个过渡空间,空间复杂度O(1)。
你们还想看什么?
❤️ 「更多编程题」