算法初识:常用的五种排序算法-冒泡排序
问题:
给你一串不重复的整数,请给他们排序,根据大小升序。
例如:7,9,8,5,6,3,4,2,1
排序后:1,2,3,4,5,6,7,8,9
排序过程:
思路:
依次比较相邻的两个数,将小的数放在前面,大的数放在后面。
(1)第一次比较:首先比较第一和第二个数,将小的数放在前面,将大的数放在后面。
(2)比较第2和第3个数,将小的数 放在前面,大的数放在后面。
......
(3)如此继续,直到比较到最后的两个数,将小的数放在前面,大的数放在后面,重复步骤,直至全部排序完成
(4)在上面一趟比较完成后,最后一个数一定是最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。
(5)在第二趟比较完成后,倒数第二个数也一定是第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。
(6)依次类推,每一趟比较次数依次减少
冒泡排序的时间复杂度是O(n^2)
代码:
#!/usr/bin/python3
nums_str = input("请输入的数列(以英文逗号隔开):")
nums_list = nums_str.split(',')
# 冒泡排序 O(n^2)
for i in range(0, len(nums_list) - 1):
# 本轮是否交换过元素
has_changed = False
for j in range(0, len(nums_list) - i - 1):
if int(nums_list[j]) > int(nums_list[j + 1]):
nums_list[j], nums_list[j + 1] = nums_list[j + 1], nums_list[j]
has_changed = True
print("==========第%d遍冒泡后的结果" % (i + 1), nums_list)
# 如果本轮没有交换过元素,则说明都已经排好序了
if not has_changed:
break
print("排序好的数列:", nums_list)
执行结果: