冒泡排序:通过比较2个相邻元素之间的大小,交换元素顺序,从而达到排序目的。
从百度百科摘抄下来的冒泡排序原理如下:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
如上图,列表num有6个元素,地址为0-5。
我们把规律列出来:
第1轮,i=0:从num[0]开始,比较5次,6-1
第2轮,i=1:从num[1]开始,比较4次,6-1-1
第3轮,i=2:从num[2]开始,比较3次,6-1-2
第4轮,i=3:从num[3]开始,比较2次,6-1-3
第5轮,i=4:从num[4]开始,比较1次,6-1-4
总共比较5轮,就完成排序。轮数:len-1
比较的次数为:len-1-i
外循环:比较的轮数。len-1
内循环:每轮比较的次数。len-1-i
python代码实现:
python
def bubble_sort(num):
for i in range(len(num)-1):
for j in range(len(num)-i-1):
if num[j]>num[j+1]:
num[j],num[j+1]=num[j+1],num[j]
return num
print(bubble_sort([1,3,4,6,5,2]))
算法时间复杂度分析:
当有n个数,全部都是逆序的时候:
列表:n,n-1,n-2,n-3,......,3,2,1
第1次:需要进行n-1次交换:得到n-1,n-2,n-3,......,3,2,1,n
第2次冒泡需要n-2次交换:得到n-2,n-3,......,3,2,1,n-1,n
根据这个规律:
第n-2次冒泡需要2次:得到2,1,3,4,......,n-1,n
第n-1次冒泡需要交换1次:得到1,2,3,4,......,n-1,n
在计算时间复杂度时,忽略低次幂,忽略高次幂的系数。