推荐: 十大经典排序算法介绍 , 冒泡排序介绍
python 代码实现:
# 冒泡排序:升序
def bubbleSort(array: list) -> list:
# i表示循环次数,与下标无关;j表示数组下标
for i in range(1, len(array)):
for j in range(0, len(array) - i):
if array[j] > array[j + 1]:
temp = array[j]
array[j] = array[j + 1]
array[j + 1] = temp
return array
if __name__ == '__main__':
array = [2, 4, 1, 6, 3, 5, 3, 6, 9, 2]
print(bubbleSort(array)) # [1, 2, 2, 3, 3, 4, 5, 6, 6, 9]
注:可以使用 python 中特有的变量交换方式实现两个变量的交换:
a, b = b, a # a,b变量数值交换
则冒泡排序代码可以简化为:
# 冒泡排序:升序
def bubbleSort(array: list) -> list:
# i表示循环次数,与下标无关;j表示数组下标
for i in range(1, len(array)):
for j in range(0, len(array) - i):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
return array
if __name__ == '__main__':
array = [2, 4, 1, 6, 3, 5, 3, 6, 9, 2]
print(bubbleSort(array)) # [1, 2, 2, 3, 3, 4, 5, 6, 6, 9]
在一般情况下,冒泡排序需要两次 for 循环,所以时间复杂度是 O(n2)
但在最好的情况下(即数组已经有序),只需要判断大小而不需要执行交换操作;此时我们可以在循环过程中设置一个 flag 变量来标记是否执行了交换操作;如果第一次循环过程中都没有执行交换操作,则说明数组已经有序,则可以跳出循环,此时只需要一个 for 循环,则时间复杂度为 O(n)
因此冒泡排序的一般时间复杂度为 O(n2),最坏情况为 O(n2),最好情况为 O(n)