冒泡排序

冒泡排序(Bubble Sort)重复地遍历要排序的数列,一次比较两个元素,如果它们顺序错误就交换过来。遍历数列的工作是重复地进行直到没有需要交换,也就是该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法运作如下

1)比较相邻的元素。如果第一个比第二个大(升序),就交换它们两个。

2)对每一对相邻元素作同样的工作,从开始第一队到结尾的最后一对。这步作完后,最后的元素会是最大的数。

3)针对所有的元素重复以上步骤,除了最后一个。

4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

冒泡排序的分析:

每次对比次数如下:

时间复杂度:

1)最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)

2)最坏时间复杂度O(n2)

3)稳定性:稳定

# -*- coding: utf-8 -*-
def bubble_sort(alist):
for j in range(len(alist) - 1):
count =0
for i in range(len(alist) - 1 - j):
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 ==count:
return
# i 0~n-2 range(0,n~1) j=0
# i 0~n-3 range(0,n-1-1) j=1
# i 0~n-4 range(0,n-1-2) j=2
# j=n i range(0,n-1-j)

if __name__ == '__main__':
arrary = [9, 8, 10, 15, 7, 3, 20, 14, 2]
print(arrary)
print(len(arrary))
bubble_sort(arrary)
print(arrary)

运行结果:

[9, 8, 10, 15, 7, 3, 20, 14, 2]
9
[2, 3, 7, 8, 9, 10, 14, 15, 20]

Process finished with exit code 0

原文地址:https://www.cnblogs.com/bashliuhe/p/13205984.html