Python算法学习(4)——选择排序

简单排序篇


列表排序的简单排序有三种,分别是冒泡排序、选择排序和插入排序。
这里我们来讨论选择排序:

选择排序

在学习过冒泡排序后,我们对于列表排序就有了一定的认识和思路。
选择排序就是不断的从列表无序区域内中找到最小的元素(或最大的元素),将其放置在有序区域,直到无序区域为空时,我们就得到了一个有序(升序或降序)的新列表。
其实现代码如下

#选择排序
def select_sort(list):
    list_new=[]                     #创建新列表作为有序区域
    for i in range(len(list)):      #第i趟选择
        min_val=min(list)           #min函数找到列表中最小元素
        list_new.append(min_val)    #将最小元素添加到有序区域
        list.remove(min_val)        #将最小元素从无需区域中删除
    return list_new

li=[10,1,5,12,11,3,8,6,4,2,7]
print(select_sort(li))

运行结果如下

[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12]

以上便完成了一个简单的选择排序,但这时我们又发现上面代码中创建了一个新的列表,同时也使用了python自带的列表相关的函数,这使得代码运行占用的空间资源翻倍,那我们能不能在原列表的基础上进行选择排序呢?答案是肯定的,改进后的代码如下

#选择排序-改
def select_sort(list):
    for i in range(len(list)-1):
        mid=i
        for j in range(i+1,len(list)):
            if list[j]<list[mid]:
                mid=j
        if mid !=i:
            list[mid],list[i]=list[i],list[mid]

li=[10,1,5,9,11,3,8,6,4,12,2,15]
select_sort(li)
print(li)

运行结果如下

[1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15]

改进后的选择排序使用了两层for循环在原列表上进行了选择排序,此时时间复杂度为O(n²)

提示:下一篇为简单排序篇——插入排序

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快快飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值