一、冒泡法介紹
冒泡法屬于交換排序恶导,兩兩比較大小浆竭,交換位置,如同水泡咕嘟咕嘟往上冒惨寿。結(jié)果分為升序和降序排列
- 升序:
n個(gè)數(shù)從左至右邦泄,編號從0開始到n-1,索引0和1的值比較缤沦,如果索引0大虎韵,則交換兩者位置,如果索引1大缸废,則不交換包蓝。繼續(xù)比較索引1和2的值,將大值放在右側(cè)企量。直至n-2和n-1比較完测萎,第一輪比較完成。第二輪從索引0比較到n-2届巩,因?yàn)樽钣覀?cè)n-1位置上已經(jīng)是最大值了硅瞧。依次類推,每一輪都會減少最右側(cè)的不參與比較恕汇,直至剩下最后2個(gè)數(shù)比較腕唧。 - 降序則和升序相反或辖。
二、過程實(shí)現(xiàn)圖解:
image.png
image.png
三枣接、使用Python代碼實(shí)現(xiàn)
1颂暇,簡單列表冒泡法的實(shí)現(xiàn):
#冒泡法的實(shí)現(xiàn)
lst = [4,3,2,1]
length = len(lst)
for i in range(length):
for j in range(length-1-i):
if lst[j] > lst[j+1]:
tmp = lst[j+1]
lst[j+1] = lst[j]
lst[j] = tmp
print(i,j,lst)
#實(shí)現(xiàn)過程:
0 0 [3, 4, 2, 1]
0 1 [3, 2, 4, 1]
0 2 [3, 2, 1, 4]
1 0 [2, 3, 1, 4]
1 1 [2, 1, 3, 4]
2 0 [1, 2, 3, 4]
2,簡單冒泡實(shí)現(xiàn)
#簡單冒泡實(shí)現(xiàn)
num_list = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9]]
nums = num_list[1]
print(nums)
length = len(nums)
count_swap = 0 #交換次數(shù)
count = 0 #比較次數(shù)
for i in range(length):
for j in range(length-i-1):
count += 1
if nums[j+1] > nums[j]:
tmp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = tmp
count_swap += 1
print(nums,count_swap,count)
#實(shí)現(xiàn)結(jié)果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1] 36 36