数据结构与算法——经典排序算法(更新中)

一、 冒泡排序

1.目的:一堆杂乱无序的数据,使他们从小到大排序。

  1. 例如: [1,4,3,5,2] 通过冒泡方法排序成:[1,2,3,4,5]

2.冒泡法:比较相邻的两个数,第一个数比第二个数大,就交换他们两个,然后用最大的和下一个相邻的比大小,直到比较最后一个(升序)。

3.代码演示一:

# 定义一组数据
num: List[Union[int, Any]] = [1, 5, 3, 2, 4]
# print(num[0])
# 第一个for循环是整体比较了多少次,循环次数逐次减少
for j in range(len(num)-1,0,-1):
    print('j=',j)
    # 第二个for循环是挨个比较,然后交换位置
    for i in range(j):
        print('i=',i)
        if num[i] > num[i+1]:
            num[i], num[i + 1] = num[i + 1], num[i]
            print(num)


结果显示如下,为了方便了解步骤,已经逐步打印出来各个结果

在这里插入图片描述

代码演示二:

# 定义一组数据
num: List[Union[int, Any]] = [1, 5, 3, 2, 4]
# print(num[0])
# 第一个for循环是整体比较了多少次,循环次数逐次减少
for i in range(1,len(num)-1):
    print('i=',i)
    # 第二个for循环是挨个比较,然后交换位置
    for j in range(0, len(num)-i):
        print('j=', j)
        if num[j] > num[j+1]:
            num[j], num[j + 1] = num[j + 1], num[j]
            print(num)

运行结果:

在这里插入图片描述

4.时间复杂度

  • 最优时间复杂度:O(n)
  • 最坏时间复杂度:O(n2)
  • 稳定性:稳定

二、选择排序

1. 选择排序法:从一组数据中,从最末尾的数据中找最小(大)的数据存到序列的起始位置,再从剩余的末尾找最小(大)的,排到已排序的数据的末尾。

2.动态图演示如下:选择排序图例

3.代码演示

num = [1, 4, 5, 3, 2]
print(len(num))
for i in range(len(num) - 1):
    min_index = i
    print('min_index=', min_index)
    for j in range(i + 1, len(num)):
        if num[min_index] > num[j]:
            min_index = j
            print('找到最小的值交换到前面序列', num[min_index])
        # 如果i不是最小数据时,进行交换
        if i != min_index:
            num[i], num[min_index] = num[min_index], num[i]
            print(num)

运行结果

在这里插入图片描述

4.时间复杂度

  • 最优时间复杂度:O(n2)
  • 最坏时间复杂度:O(n2)
  • 稳定性:不稳定(考虑升序每次选择最大的情况)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值