1、原理
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2、算法简介
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
3、动图演示

4、python代码实现
# 冒泡排序
# 时间复杂度:(n-1) + (n-2) + ... + 1 = n*(n-1)/2
import random
def Bubble_Sort(s):
sum_ = 0
count = len(s)
for i in range(count - 1):
for j in range(count-1-i):
if s[j] > s[j+1]:
s[j], s[j+1] = s[j+1], s[j]
print(f"第 {i} 步: {s}")
sum_ += 1
print(f"花费次数:{sum_}")
return s
if __name__ == '__main__':
n = int(input(":::::"))
s = [random.randint(0, n) for i in range(n)]
# s = [1, 2, 3, 4, 5]
Bubble_Sort(s)
运行结果:
:::::5
第 0 步: [0, 4, 0, 1, 2]
第 0 步: [0, 0, 4, 1, 2]
第 0 步: [0, 0, 1, 4, 2]
第 0 步: [0, 0, 1, 2, 4]
第 1 步: [0, 0, 1, 2, 4]
第 1 步: [0, 0, 1, 2, 4]
第 1 步: [0, 0, 1, 2, 4]
第 2 步: [0, 0, 1, 2, 4]
第 2 步: [0, 0, 1, 2, 4]
第 3 步: [0, 0, 1, 2, 4]
花费次数:10
5、复杂度分析
时间复杂度:
- 最坏的情况,时间复杂度为:(n-1)+(n-2)+(n-3)+ ... +n=n*(n-1)/2=O(
)
- 最好的情况,时间复杂度位:O(n)
空间复杂度:O(1)
6、算法稳定性:稳定
本文介绍了冒泡排序的基本原理和算法过程,通过动图直观演示排序过程,并提供了详细的Python代码实现。此外,还分析了冒泡排序的时间复杂度,指出其在最好和最坏情况下的时间复杂度分别为O(n)和O(n^2),同时强调冒泡排序是稳定的排序算法。
1347

被折叠的 条评论
为什么被折叠?



