算法实现
详情见注释
def bubble_sort(data_set):
n = len(data_set)
for i in range(n - 1): # 第i趟
change_count = False
for j in range(n - 1 - i): # 为什么是n-1?因为循环内部涉及到了j+1的情况, 实际上总是n
if data_set[j] > data_set[j + 1]: # 大的数据往后排
data_set[j + 1], data_set[j] = data_set[j], data_set[j + 1]
change_count = True
if not change_count: # 如果第i趟没有交换任何值,那么该数据集实际上已经有序,跳出循环
break
if __name__ == '__main__':
data_set = [37, 6, 45, 32, 79, 79, 93, 57, 21, 3, 43, 28, 85, 50, 4, 20, 1, 23, 98]
bubble_sort(data_set)
print(data_set)
算法复杂度
时间复杂度O(n²)
两次循环,虽然内层循环的次数随着外层循环的行进而减少,但是影响的只是系数,总体还是n²级别的。