1.冒泡排序 (时间复杂度是O(n)) ls1 = [9, 8, 7, 6, 0, 1, 2, 3, 4, 5] length = len(ls1) count = 0 swap_count = 0 for i in range(length): for j in range(length-i-1): count += 1 if ls1[j] > ls1[j+1]: # 不管是否有交换,都会进 ls1[j], ls1[j+1] = ls1[j+1], ls1[j] #行下一轮的比较 swap_count += 1 print(ls1) print(count, swap_count) >>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 45 30 冒泡排序,效率提升 (时间复杂度是O(n)) ls1 = [9, 8, 7, 6, 0, 1, 2, 3, 4, 5] length = len(ls1) count = 0 swp_count = 0 for i in range(length): flag = False # 假定排序已经是达到目标,排 for j in range(length-1-i): # 序无需进行交换 count += 1 if ls1[j] > ls1[j+1]: ls1[j], ls1[j+1] = ls1[j+1], ls1[j] flag = True # flag = True 说明排序有交换过,还 swp_count += 1 # 得进行下一轮比较 if not flag: # 如果not flag 为真,则说明此轮循环没 break # 有进行交换,序列已经达到排序目标 print(ls1) print(count, swp_count) # 从打印的效果看,效率有明显的提升 >>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 35 30