python--算法之冒泡排序

基础版冒泡排序:

import random

def bubble_sort(list_x):
    for i in range(len(list_x) - 1):
        for j in range(len(list_x) - 1 - i):
            if list_x[j] > list_x[j+1]:
                list_x[j], list_x[j+1] = list_x[j+1], list_x[j]


list1 = [random.randint(0, 100) for i in range(10)]

print(list1)
bubble_sort(list1)
print(list1)

# =============输出结果=============
[60, 18, 11, 48, 36, 44, 80, 70, 19, 32]
[11, 18, 19, 32, 36, 44, 48, 60, 70, 80]

       但是我们遇到了一个问题如下:

def bubble_sort(list_x):
    for i in range(len(list_x) - 1):
        for j in range(len(list_x) - 1 - i):
            if list_x[j] > list_x[j+1]:
                list_x[j], list_x[j+1] = list_x[j+1], list_x[j]
        print(list_x)    # 我们把每次排序的过程打印出来

list1 = [1, 2, 3, 10, 5]
bubble_sort(list1)

# =====================输出结果========================
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]
[1, 2, 3, 10, 5]

    问题显而易见,运算过程很不友好,所以我们进行改良:在每一次排序后做一个判断,如果列表已经排好序,那么就不继续进行,直接return结束掉。

def bubble_sort(list_x):
    for i in range(len(list_x) - 1):
        change = False
        for j in range(len(list_x) - 1 - i):
            if list_x[j] > list_x[j+1]:
                list_x[j], list_x[j+1] = list_x[j+1], list_x[j]
                change = True
        if not change:
            return
        print(list_x)

list1 = [1, 2, 3, 10, 5]

print(list1)
bubble_sort(list1)

# ==========输出结果===========
[1, 2, 3, 10, 5]
[1, 2, 3, 5, 10]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值