冒泡排序,由一头先出现最大值,逐渐向另一端扩展
什么是冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复遍历要排序的数列,一次比较两个元素,按大小值顺序排序,直到没有需要交换,则该数列排序完成。越小的元素经过交换后会慢慢”浮”到数列顶端,故称“冒泡排序”。
冒泡排序的过程:
- 1、比较相邻元素,按升序规则交换两者顺序;
- 2、对每一对相邻元素做同样工作,从第一对到结尾的最后一对。结束后最后的元素会是最大的数;
- 3、针对所有元素重复上述步骤,除了最后一个。
- 4、再除去上一轮的最后一个最大元素,继续重复步骤,直到所有都比较完成;
代码实现
#冒泡排序
def bubble_sort(list):
n = len(list)
for i in range(n-1):
count = 0 #记录一轮比较换位了多少次
for j in range(0,n-1-i):
if list[j] > list[j+1]:
#list[j],list[j+1] = list[j+1],list[j]
tmp = list[j]
list[j] = list[j+1]
list[j+1] = tmp
count +=1
if count == 0: #比较了一轮没有一次换位操作,则排序完成
break
print(list)
b = [1,8,3,6,4,9,0,2]
a = bubble_sort(b)
>> [0, 1, 2, 3, 4, 6, 8, 9]
步骤解析
首先:定义函数 bubble_sort,输入参数 list
第二步:判断列表长度,列表有n个元素,就要遍历n-1次
第三步:开始第一次遍历,在末尾排出最大数,两两比较要比较n-1次
第四步:每一轮的遍历都使用 count 计数,如果count 计数为 0 ,则说明该次比较的所有数排列均为升序,则排序完成
n个数,遍历n-1次,每次结束末尾都排出了该次遍历的最大值
所以下次遍历的时候,末尾的数就不用参与比较了
所以第一轮比较,n个数需要比较n-1次
第二轮比较,比较n-1-1次
第三轮比较,比较n-1-2次
第四轮比较,比较n-1-3次
···