目录
什么是冒泡排序
对给定数组进行遍历,每次比较相邻两个元素大小,若大的数值在前面则交换两数位置(升序),每完成一趟遍历数组中最大的元素都会上升到数组的末尾,这也是冒泡一词的由来。
算法原理
- (升序)列表每相邻的数,如果前面比后面大,则交换这两个数。
- 一趟排序完成后,无序区减少一个数,有序区增加一个数。
- 再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成
代码示例
def bubble_sort(list):
for i in range(len(list) - 1): # 第i趟
for j in range(len(list) - i - 1):
if list[j + 1] < list[j]: # 升序
# temp = list[j + 1]
# list[j + 1] = list[j]
# list[j] = temp
list[j], list[j + 1] = list[j + 1], list[j] # python中交换元素写法
print(list) # 查看每趟比较的结果
return list
运行上述代码可以发现,若一个数组在规定的i趟排序完成前就以及排好序,为提高运行效率,则不需要进行后面的排序。
此时定义一个布尔变量,定义每趟是否进行了交换操作,若没有交换操作发生,则说明数组提前到达了有序状态。
def bubble_sort(list):
for i in range(len(list) - 1): # 第i趟
exchange = False # 默认没有交换发生
for j in range(len(list) - i - 1):
if list[j + 1] < list[j]:
list[j], list[j + 1] = list[j + 1], list[j]
exchange = True # 交换操作发生
if not exchange: # 若每趟排序后没有交换,结束循环
return
print(list)
return list
标签:二一,list,交换,range,len,算法,冒泡排序,排序
From: https://www.cnblogs.com/chase-youth/p/17902377.html