python3实现数据结构与算法30天-排序-选择排序(5)

算法思路:
每次选出最小的,放入第一个位置,
再一趟排序记录列表无序区最小的数,放第二个位置

算法关键点:有序区和无序区,无序区最小的数
时间复杂度:O(n^2)

1.简单版-代码:

import
def select_sort_simple(lst):
"""create new list, callback min & remove"""
lst_new = []
for i in range(len(lst)):
min_loc = min(lst)
lst_new.append(min_loc)
lst.remove(min_loc)
print(lst_new)
return lst_new
lst = [random.randint(0, 100) for x in range(10)]
print(lst)
print(select_sort_simple(lst))

结果:

[33, 67, 92, 15, 39, 23, 10, 53, 95, 25]
[10]
[10, 15]
[10, 15, 23]
[10, 15, 23, 25]
[10, 15, 23, 25, 33]
[10, 15, 23, 25, 33, 39]
[10, 15, 23, 25, 33, 39, 53]
[10, 15, 23, 25, 33, 39, 53, 67]
[10, 15, 23, 25, 33, 39, 53, 67, 92]
[10, 15, 23, 25, 33, 39, 53, 67, 92, 95]
[10, 15, 23, 25, 33, 39, 53, 67, 92, 95]

上面方法可以说是选择排序的简单实现,但存在几个问题,min(),remove()其实也是O(n)级别,而且开辟新的列表,消耗内存,如果序列很大,内存资源消耗大,不建议用。
下面的相当于升级版,改善之处在于,不用开辟新的序列,另外做到能抠则抠,尽量减少不必要的循环,选择排序推荐使用。

2.升级版-代码:

import random
def select_srot(lst):
for i in range(len(lst)-1): # i是第几趟
min_loc = i
for j in range(i+1, len(lst)): # j是无序区, 从i+1开始
if lst[min_loc] > lst[j]:
min_loc = j
lst[i], lst[min_loc] = lst[min_loc], lst[i]
print(lst)
lst = [random.randint(0, 100) for x in range(10)]
print(lst)
print(select_srot(lst))

结果:

[3, 22, 92, 84, 97, 52, 27, 39, 1, 63]
[1, 22, 92, 84, 97, 52, 27, 39, 3, 63]
[1, 3, 92, 84, 97, 52, 27, 39, 22, 63]
[1, 3, 22, 84, 97, 52, 27, 39, 92, 63]
[1, 3, 22, 27, 97, 52, 84, 39, 92, 63]
[1, 3, 22, 27, 39, 52, 84, 97, 92, 63]
[1, 3, 22, 27, 39, 52, 84, 97, 92, 63]
[1, 3, 22, 27, 39, 52, 63, 97, 92, 84]
[1, 3, 22, 27, 39, 52, 63, 84, 92, 97]
[1, 3, 22, 27, 39, 52, 63, 84, 92, 97]

posted on   进击的davis  阅读(55)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示