Python-排序-选择排序-优化

本文介绍了在学习《数据结构与算法之美》后,作者对选择排序算法的理解与实践。通过无优化版的选择排序代码,展示算法过程,并讨论了在已基本有序的数据中不必要的循环次数。接着提出并实现了一个优化版本,减少了循环次数。最后,分析了选择排序的空间复杂度、稳定性及时间复杂度,指出其在不同情况下的性能表现。
摘要由CSDN通过智能技术生成

以下是本人学习极客时间的专栏《数据结构与算法之美》后,自己动手敲代码实现,并写下当时的思考,希望对你也有帮助。
系列文章:
工作后,为什么还要学习数据结构与算法
Python-排序-冒泡排序-优化

选择排序的思想:将一组数据分为两部分,前面是已排序部分,后面是未排序部分,初始状态可认为位置 0 为已排序部分 (数组下标从0开始),其余为未排序部分,每一次都从未排序部分选择一个最小元素放在已排序部分的末尾,然后已排序部分增加一个元素,未排序部分减少一个元素,直到数据全部有序。

算法的过程:
1、第一次从 1 到 n-1 个元素中选择一个最小数据与位置 0 的数据交换
2、第二次从 2 到 n -1 个元素中选择一个最小数据与位置 1 的数据交换
3、第三次从 3 到 n -1 个元素中选择一个最小数据与位置 2 的数据交换

思路很简单,可是要真正动手写起来,会发现数组的下标如果处理不当,会有 BUG,而且调试起来也挺费时间,建议在写代码时加上注释,方便自己,更方便别人的理解。

无优化版:

def selection_sort(data_list):
    count = 0 
    length = len(data_list)
    for i in range(length -1):
        print(data_list) #打印每一次选择后的结果
        min_index = i #存储最小值的下标,以便最后交换
        for j in range(i+1,length):
            count +=1
            if data_list[min_index] > data_list[j]:
                min_index = j
        if min_index != i: #说明需要交换,否则不需要自己自己交换 
            tmp = data_list[i]
            data_list[i] = data_list[min_index]
            data_list[min_index] = tmp
    print(f"总循环次数为 {count}")
    return data_list

现在执行一下,看下代码的运行效果

unsort = [3,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值