Python冒泡排序(2)

本文详细介绍了冒泡排序算法的工作原理及其实现过程。通过具体的Python代码示例,展示了如何通过比较相邻元素并交换位置来逐步将序列排序。适用于初学者理解和实现冒泡排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序:通过与相邻元素比较的方式每次将一个数归位

Python代码:

"""
冒泡排序(2)

在未排序的数中,通过两两比较[换位]的方式,将最小的数移至首位
N个数排序,则需要执行N-1轮,第1轮比较N-1次,后续每轮比上一轮少比较1次

本例中:
第1轮将0放到正确位置;
第2轮将1放到正确位置;
......
第9轮将8放到正确位置;

此方法中,两个位置数字比较时,有一个位置是不变的
第1轮第1次是位置0、位置1的数字比较,前者大,则互换位置;
第1轮第2次是位置0、位置2的数字比较,前者大,则互换位置;
......
第1轮第9次是位置0、位置9的数字比较,前者大,则互换位置;

第2轮第1次是位置1、位置2的数字比较,前者大,则互换位置;
......
第2轮第8次是位置1、位置9的数字比较,前者大,则互换位置;
......

"""

lst = [3, 6, 9, 1, 8, 7, 2, 5, 4, 0]
print("排序前: %s\r\n" %lst)

#
for i in range(len(lst)-1):
    print("第%s轮" % (i+1))
    #
    for j in range(i+1, len(lst)):
        # 如果前大后小,则交换位置
        if lst[i] > lst[j]:
            lst[i],lst[j] = lst[j],lst[i]
            print("    第%s次 [%s]:%s,[%s]:%s比较 互换 %s" % (j-i,i,lst[j],j,lst[i],lst))
        else:
            print("    第%s次 [%s]:%s,[%s]:%s比较 不变 %s" % (j-i,i,lst[i],j,lst[j],lst))

print("\r\n排序后:  %s" % lst)

 

输出结果:

E:\python\algorithm>python3 bubbleSort2.py
排序前: [3, 6, 9, 1, 8, 7, 2, 5, 4, 0]

第1轮
    第1次 [0]:3,[1]:6比较 不变 [3, 6, 9, 1, 8, 7, 2, 5, 4, 0]
    第2次 [0]:3,[2]:9比较 不变 [3, 6, 9, 1, 8, 7, 2, 5, 4, 0]
    第3次 [0]:3,[3]:1比较 互换 [1, 6, 9, 3, 8, 7, 2, 5, 4, 0]
    第4次 [0]:1,[4]:8比较 不变 [1, 6, 9, 3, 8, 7, 2, 5, 4, 0]
    第5次 [0]:1,[5]:7比较 不变 [1, 6, 9, 3, 8, 7, 2, 5, 4, 0]
    第6次 [0]:1,[6]:2比较 不变 [1, 6, 9, 3, 8, 7, 2, 5, 4, 0]
    第7次 [0]:1,[7]:5比较 不变 [1, 6, 9, 3, 8, 7, 2, 5, 4, 0]
    第8次 [0]:1,[8]:4比较 不变 [1, 6, 9, 3, 8, 7, 2, 5, 4, 0]
    第9次 [0]:1,[9]:0比较 互换 [0, 6, 9, 3, 8, 7, 2, 5, 4, 1]
第2轮
    第1次 [1]:6,[2]:9比较 不变 [0, 6, 9, 3, 8, 7, 2, 5, 4, 1]
    第2次 [1]:6,[3]:3比较 互换 [0, 3, 9, 6, 8, 7, 2, 5, 4, 1]
    第3次 [1]:3,[4]:8比较 不变 [0, 3, 9, 6, 8, 7, 2, 5, 4, 1]
    第4次 [1]:3,[5]:7比较 不变 [0, 3, 9, 6, 8, 7, 2, 5, 4, 1]
    第5次 [1]:3,[6]:2比较 互换 [0, 2, 9, 6, 8, 7, 3, 5, 4, 1]
    第6次 [1]:2,[7]:5比较 不变 [0, 2, 9, 6, 8, 7, 3, 5, 4, 1]
    第7次 [1]:2,[8]:4比较 不变 [0, 2, 9, 6, 8, 7, 3, 5, 4, 1]
    第8次 [1]:2,[9]:1比较 互换 [0, 1, 9, 6, 8, 7, 3, 5, 4, 2]
第3轮
    第1次 [2]:9,[3]:6比较 互换 [0, 1, 6, 9, 8, 7, 3, 5, 4, 2]
    第2次 [2]:6,[4]:8比较 不变 [0, 1, 6, 9, 8, 7, 3, 5, 4, 2]
    第3次 [2]:6,[5]:7比较 不变 [0, 1, 6, 9, 8, 7, 3, 5, 4, 2]
    第4次 [2]:6,[6]:3比较 互换 [0, 1, 3, 9, 8, 7, 6, 5, 4, 2]
    第5次 [2]:3,[7]:5比较 不变 [0, 1, 3, 9, 8, 7, 6, 5, 4, 2]
    第6次 [2]:3,[8]:4比较 不变 [0, 1, 3, 9, 8, 7, 6, 5, 4, 2]
    第7次 [2]:3,[9]:2比较 互换 [0, 1, 2, 9, 8, 7, 6, 5, 4, 3]
第4轮
    第1次 [3]:9,[4]:8比较 互换 [0, 1, 2, 8, 9, 7, 6, 5, 4, 3]
    第2次 [3]:8,[5]:7比较 互换 [0, 1, 2, 7, 9, 8, 6, 5, 4, 3]
    第3次 [3]:7,[6]:6比较 互换 [0, 1, 2, 6, 9, 8, 7, 5, 4, 3]
    第4次 [3]:6,[7]:5比较 互换 [0, 1, 2, 5, 9, 8, 7, 6, 4, 3]
    第5次 [3]:5,[8]:4比较 互换 [0, 1, 2, 4, 9, 8, 7, 6, 5, 3]
    第6次 [3]:4,[9]:3比较 互换 [0, 1, 2, 3, 9, 8, 7, 6, 5, 4]
第5轮
    第1次 [4]:9,[5]:8比较 互换 [0, 1, 2, 3, 8, 9, 7, 6, 5, 4]
    第2次 [4]:8,[6]:7比较 互换 [0, 1, 2, 3, 7, 9, 8, 6, 5, 4]
    第3次 [4]:7,[7]:6比较 互换 [0, 1, 2, 3, 6, 9, 8, 7, 5, 4]
    第4次 [4]:6,[8]:5比较 互换 [0, 1, 2, 3, 5, 9, 8, 7, 6, 4]
    第5次 [4]:5,[9]:4比较 互换 [0, 1, 2, 3, 4, 9, 8, 7, 6, 5]
第6轮
    第1次 [5]:9,[6]:8比较 互换 [0, 1, 2, 3, 4, 8, 9, 7, 6, 5]
    第2次 [5]:8,[7]:7比较 互换 [0, 1, 2, 3, 4, 7, 9, 8, 6, 5]
    第3次 [5]:7,[8]:6比较 互换 [0, 1, 2, 3, 4, 6, 9, 8, 7, 5]
    第4次 [5]:6,[9]:5比较 互换 [0, 1, 2, 3, 4, 5, 9, 8, 7, 6]
第7轮
    第1次 [6]:9,[7]:8比较 互换 [0, 1, 2, 3, 4, 5, 8, 9, 7, 6]
    第2次 [6]:8,[8]:7比较 互换 [0, 1, 2, 3, 4, 5, 7, 9, 8, 6]
    第3次 [6]:7,[9]:6比较 互换 [0, 1, 2, 3, 4, 5, 6, 9, 8, 7]
第8轮
    第1次 [7]:9,[8]:8比较 互换 [0, 1, 2, 3, 4, 5, 6, 8, 9, 7]
    第2次 [7]:8,[9]:7比较 互换 [0, 1, 2, 3, 4, 5, 6, 7, 9, 8]
第9轮
    第1次 [8]:9,[9]:8比较 互换 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

排序后:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 =====结束=====

转载于:https://www.cnblogs.com/sam11/p/8336875.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值