一、冒泡排序
1、冒泡排序实质是一种交换排序。即下标相邻索引数据两个之间有小到大,两两进行排序,直到所有数据不再两两交换为止。
2、算法思想
第一次循环:下标索引两数据,有最小索引数据开始,与后一数据进行比较。如果后面数据比前面大,则不交换,最小索引下标进一,继续进行两两比较,直达序列最后为止。
第二次循环:又由最小下标开始,两两进行比较,直到最后。
循环len(序列)个数为止。
动态效果图:
每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。
def maopaoSort(input_list):
'''
冒泡排序
:param input_list: 输入的list
:return: 排序后结果
'''
#判空,如果输入的list为空,返回空
if len(input_list) == 0:
return []
#循环比较所有
for i in range(len(input_list)-1):
print("第{}趟排序:".format(i+1))
#对前一个的数据与后一个的数据进行比较
for j in range(len(input_list) - 1):
#后一个的数据比前一个小,交换数据
if input_list[j + 1] < input_list[j]:
input_list[j], input_list[j+1] = input_list[j+1], input_list[j]
print(input_list)
return input_list
my_list = [5,4,7,1,7,3,2,9]
maopaoSort(my_list)
3、时间复杂度
如果所有数据都是由小到大排序好的,只需要循环一次即可,最优的时间复杂度为O(n)
如果所有数据都是由大到小排队的,那么每一个数据都需要循环比较,最差的时间复杂度为O(n^2)
4、算法稳定性
冒泡排序是一种稳定的排序方式,相同值的的序列前后位置排序完不改变。所有冒泡排序是一张稳定排序算法。