python实现选择排序

本文探讨了如何通过原地排序算法改进选择排序,减少内存消耗,提高效率。原地选择排序避免了额外数组的使用,通过不断交换列表元素达到有序,适用于资源有限的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

# 思路:每次选择出列表中的最大(小)值,然后将其从列表中移除,并将移除的值依次排列

基础版

@clocked
def select_sort(li):
    li_len = len(li)
    new_li = []
    for i in range(li_len):
        # 选出最小元素
        min_val = min(li)
        # 删除这个元素
        li.remove(min_val)
        # 将这个元素添加到一个新的列表中
        new_li.append(min_val)

    return new_li

优化

可以看到,上面的排序中,需要我们额外的申请一个数组,这样非常的消耗资源!比如一个1M的列表,经过排序后就会变成2M,如果是1G,经过排序后就会变成2G,所以是非常耗资源的,那么有没有可以优化的地方呢?

'''
答案是肯定的!就是原地排序。
原地排序,排序过程中,将列表分为两部分,左边设为有序区,右边设为无序区
每次选择无序区中的最小值和无序区中的第一个进行交换,交换完成之后,将其
合并到有序区,直到无序区只有一个元素,排序完成!
'''

选择排序

@clocked
def select_sort2(li):
    li_len = len(li)
    for i in range(li_len - 1):
        min_loc = i  # 记录最小值的位置
        for j in range(i + 1, li_len):  # w无序区:[i,li_len-1]
            # 找出最小值
            if li[j] < li[min_loc]:
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]

测试

同步更新于个人博客系统:选择排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值