冒泡是一个最简单的排序算法,但是我认为还是有一些地方值得思考和研究来加深对这个排序的理解。

个人总结以下几点

1.待排数列如果长度唯一或者不合法就不必再继续走完整个循环

2.相邻元素两两交换

3.针对剩下的待排元素已经出现有序情况时,可以设置一个动态布尔类型的flag,没有出现过交换,那么剩下的循环就不在执行

4.针对待排元素出现局部有序的情况,可以记录下每次有序区的临界索引作为边界。再次进入循环跳过有序区

5.无论怎么优化。冒泡排序的时间复杂度都是O(n2)

 1 def bubble_sort(arr_list):
 2     if len(arr_list)<=1:
 3         return arr_list
 4     else:
 5         border=len(arr_list)-1  #The border of the already sorted array
 6         last_cmp_index=0    #Using for recording and passing the last stoped index
 7         for i in range(len(arr_list)):
 8             flag=False
 9             for j in range(border):
10                 if arr_list[j]>arr_list[j+1]:
11                     arr_list[j],arr_list[j+1]=arr_list[j+1],arr_list[j]
12                     last_cmp_index=j
13                     flag=True
14             if not flag:
15                 break
16             border=last_cmp_index
17         return arr_list