排序算法(python)-冒泡排序、选择排序


冒泡排序

在这里插入图片描述

  • 冒泡排序的算法思路在于对无序表进行多趟比较交换;
  • 每次包括两两相邻比较,并将逆序数据位置互换;
  • 经过n-1次比较交换,实现整表排序;每次过程类似气泡浮出水面。
    在这里插入图片描述
def bubble_Sort(alist):
    n = len(alist)
    for passnum in range(n-1,0,-1):
        for j in range(passnum):
            if alist[j] > alist[j+1]:
                alist[j], alist[j+1] = alist[j+1], alist[j]

    return alist

alist = [54,2,1,77,100,15,12,18]
print(bubble_Sort(alist))
输出结果:
[1, 2, 12, 15, 18, 54, 77, 100]

比对次数和交换次数时间复杂度:O(n^2);
冒泡排序算法时间效率最差,到那时有一点优势,就是无需任何额外的存储空间开销。

冒泡排序性能改进

  • 通过检测每轮比对是否发生交换,可以提前确定排序是否完成;
  • 如果某轮比对没有发生数据交换,说明列表已经排好序,可以提前结束算法。
def short_bubble_Sort(alist):
    exchanges = True
    passnum = len(alist) - 1
    while passnum > 0:
        exchanges = False
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                exchanges = True
                alist[i], alist[i+1] = alist[i+1], alist[i]
        passnum = passnum - 1
    return alist

test_list = [10,20,30,80,60,50,100,120]
print(short_bubble_Sort(test_list))
输出结果:
[10, 20, 30, 50, 60, 80, 100, 120]

选择排序

在这里插入图片描述

  • 选择排序对冒泡排序进行了改进,保留了多轮比对思路;
  • 相对冒泡排序,选择排序仅进行1次交换,记录最大项所在位置,最后再跟本轮最后一项交换;
  • 选择排序算法时间复杂度:
    比对次数不变,O(n);
    交换次数减少为O(n)。
    在这里插入图片描述
def selection_Sort(alist):
    n = len(alist)
    for i in range(n):
        min_index = i
        for j in range(i+1,n):
            if alist[min_index] > alist[j]:
                min_index = j
        alist[min_index], alist[i] = alist[i], alist[min_index]

    return alist

test_list = [54,2,1,77,100,15,12,18]
print(selection_Sort(test_list))
输出:
[1, 2, 12, 15, 18, 54, 77, 100]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

他是只猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值