假设长度为 n 的列表 lst,要按照从小到大排序,则冒泡排序的具体过程可以描述为:
首先从列表的第一个元素开始到列表最后一个元素为止,对列表中相邻的两个元素进行比较,如果位于列表左端的元素大于列表右端的元素,则交换这两个元素在列表中的位置。
这样操作后列表最右端的元素即为该列表中所有元素的最大值。接着对该列表除最右端的 n-1 个元素进行同样的操作,再接着对剩下的 n-2 个元素做同样的操作,直到整个列表有序排
列。
请给定任一列表 lst 实现以上过程。例如列表:lst = [54, 26, 93, 17, 77, 31, 44, 55, 20]
a = input().split(",")
a = list(map(lambda i : int(i), a))
for j in range(1,len(a)):
for i in range(len(a)-1):
if a[i] > a[i+1]:
a[i], a[i+1] = a[i+1],a[i]
print(a)
def bubble_sort(alist):
# 结算列表的长度
n = len(alist)
# 外层循环控制从头走到尾的次数
for j in range(n - 1):
# 用一个count记录一共交换的次数,可以排除已经是排好的序列
count = 0
# 内层循环控制走一次的过程
for i in range(0, n - 1 - j):
# 如果前一个元素大于后一个元素,则交换两个元素(升序)
if alist[i] > alist[i + 1]:
# 交换元素
alist[i], alist[i + 1] = alist[i + 1], alist[i]
# 记录交换的次数
count += 1
# count == 0 代表没有交换,序列已经有序
if 0 == count:
break
if __name__ == '__main__':
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print("原列表为:%s" % alist)
bubble_sort(alist)
print("新列表为:%s" % alist)
# 结果如下:
# 原列表为:[54, 26, 93, 17, 77, 31, 44, 55, 20]
# 新列表为:[17, 20, 26, 31, 44, 54, 55, 77, 93]