排序算法
在数据结构与算法中,常用的排序算法有如下6种:冒泡排序、选择排序、插入排序、快速排序、希尔排序以及归并排序。下面介绍第一种算法:冒泡排序。
冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法。名字由来是因为越小的元素会经由交换慢慢“浮”到列数的顶端。
基本思想是:重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,重复进行遍历工作直到没有再需要交换,也就是该数列已经排序完毕。
算法运作
- 比较相邻的元素。如果第一个比第二个大(升序),则交换两个元素。
- 对每一对相邻的元素做相同的工作,从开始第一对到结尾的最后一对。完成这一步,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复以上的步骤,直到没有任何一对数字需要比较。
算法分析
第一次交换过程图示:
我们需要进行 n-1 次冒泡过程,每次对应的比较次数如图:
Python 代码
def bubble_sort(alist):
n = len(alist)
for j in range(n-1):
count = 0
for i in range(n-1-j):
if alist[i] > alist[i + 1]:
alist[i],alist[i+1] = alist[i+1],alist[i]
count += 1
if 0 == count: # 表示没有元素进行交换
return
时间复杂度
- 最优时间复杂度: O ( n ) O(n) O(n),即遍历一次发现没有任何可以交换的元素,结束排序。
- 最坏时间复杂度: O ( n 2 ) O(n^2) O(n2)
- 稳定性:稳定