冒泡排序:
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
简单的代码实现:
# 冒泡排序
arr=[1,56,88,22,21,3]
def bubble_sort(arr):
n=len(arr) # 获取到该列表的长度
for i in range(n-1):
for j in range(n-1-i):
if arr[j]>arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j]
bubble_sort(arr)
print('输出结果为:',arr)
输出结果为: [1, 3, 21, 22, 56, 88]
排序思想:
冒泡排序一次比较两个元素,首先拿第一个与第二个做比较,如果第二比第一个大,便交换位置,重复次操作比较到最后一个,那么第一轮就完成了,效果就是最后一个元素是这个列表中最大的一个;接着在来一轮,同上,效果,倒数第二个元素大小是仅次于倒数第一个元素…
效果图
思考?
要是我们比较一次之后后面都是顺序了,但是我们还是继续进行比较的操作,有什么办法让我在知道后面是顺序之后,就不做接下去的比较了吗?
优化代码
#3.优化 如果内层循环一进去就是顺序的,那之后的外层循环都可以不用进行了的
arr=[1,56,88,21,21,3]
def bubble_sort2(arr):
n=len(arr) # 获取到列表的长度
for i in range(n-1,0,-1):
for j in range(0,i):
flag=True # 设置一个flag 如果一次都没有进入换位置,就说名后面是顺序,直接退出内层循环
if arr[j]>arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j]
flag=False
if flag:
return
bubble_sort2(arr)
print(arr)