Python3 实现选择排序和插入排序

一、选择排序的实现

原理思路

  1. 对给定的一组数据,经过第一轮依次比较,找到最小的那个数,然后把最小的那个数和第一个数交换;
  2. 然后继续对不包括第一个数的剩余的数进行第二轮依次比较,找到最小的那个数,然后和第二个数进行交换;
  3. 以此类推,直至进行比较的数只剩一个停止。

代码实现

def seletion_sort(collecion):
    # 选择排序
    length = len(collection)
    for i in range(length - 1):    # 比较length-1轮就可以排好序
        least = i
        for j in range(i+1, length):
            if collection[j] < collection[least]:
                least = j
        collection[i], collection[least] = collection[least], collection[i]
    return collection

if __name__ == '__main__':
    collection = list(map(int, input().split()))
    print('排序前:', end='')
    for i in collection:
        print(i, end=' ')
    collection = selection_sort(collection)
    print('排序后:', end=' ')
    for i in collection:
        print(i, end=' ')

小结

选择排序是一种不稳定的排序方法,因为选择排序不管是否已经排序好,都会依次比较所有的数,所以最好、最坏和平均情况下的时间复杂度都为O(n2),空间复杂度为O(1)。

二、插入排序实现

原理思路

  1. 对于给定的一组数据,初始时把第一个数作为一个有序序列,其余的数为无序序列;
  2. 取出无序序列的第1个数,与有序序列中最后一位开始作比较,插入到有序序列中;
  3. 不断重复,直至无序序列全部插入到有序序列中停止。

代码实现

def insertion_sort(collection):
    # 插入排序
    length = len(collection)
    for i in range(1, length):    # 第一个数作为初始有序序列,所以不用比较
        j = i - 1
        while j >= 0 and collection[j + 1] < collection[j]:
            collection[j], collection[j + 1] = collection[j + 1], collection[j]
            j -= 1
    return collection

if __name__ == '__main__':
    collection = list(map(int, input().split()))
    print('排序前是:', end='')
    for i in collection:
        print(i, end=' ')
    collection = insertion_sort(collection)
    print('\n排序后是:', end='')
    for i in collection:
        print(i, end=' ')

小结

插入排序 是一种稳定的排序方法,最好情况下(即已经排好序)的时间复杂度为O(n),最坏 条件下的时间复杂度为O(n2),平均时间情况下时间复杂度为O(n2),空间复杂度为O(1)。

项目地址

后续实现的一些算法我都会统一放到GitHub,欢迎小伙伴们一起交流、学习,一起进步!下面是我的GitHub网址。
Github Data_Structure_and_Algorithm

后记:
我从本硕药学零基础转行计算机,自学路上,走过很多弯路,也庆幸自己喜欢记笔记,把知识点进行总结,帮助自己成功实现转行。
2020下半年进入职场,深感自己的不足,所以2021年给自己定了个计划,每日学一技,日积月累,厚积薄发。
如果你想和我一起交流学习,欢迎大家关注我的微信公众号每日学一技,扫描下方二维码或者搜索每日学一技关注。
这个公众号主要是分享和记录自己每日的技术学习,不定期整理子类分享,主要涉及 C – > Python – > Java,计算机基础知识,机器学习,职场技能等,简单说就是一句话,成长的见证!
每日学一技

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值