vlambda博客
学习文章列表

算法初识:常用的五种排序算法-冒泡排序

问题:

给你一串不重复的整数,请给他们排序,根据大小升序。

例如: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)


执行结果: