给出一个列表,进行冒泡排序
原理算法:
1 li = [52, 37, 23, 11, 3, 1, ] 2 3 print(li) 4 5 # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 6 # 一共循环len(li) - 1 次 7 8 for i in range(len(li) - 1): 9 if li[i] > li[i + 1]: 10 temp = li[i] 11 li[i] = li[i+1] 12 li[i + 1] = temp 13 print(li) 14 15 for i in range(len(li) - 2): 16 if li[i] > li[i + 1]: 17 temp = li[i] 18 li[i] = li[i+1] 19 li[i + 1] = temp 20 print(li) 21 22 for i in range(len(li) - 3): 23 if li[i] > li[i + 1]: 24 temp = li[i] 25 li[i] = li[i+1] 26 li[i + 1] = temp 27 print(li) 28 29 for i in range(len(li) - 4): 30 if li[i] > li[i + 1]: 31 temp = li[i] 32 li[i] = li[i+1] 33 li[i + 1] = temp 34 print(li) 35 36 for i in range(len(li) - 5): 37 if li[i] > li[i + 1]: 38 temp = li[i] 39 li[i] = li[i+1] 40 li[i + 1] = temp 41 print(li) 42 43 ''' 44 输出的结果: 45 [52, 37, 23, 11, 3, 1] 46 [37, 23, 11, 3, 1, 52] 47 [23, 11, 3, 1, 37, 52] 48 [11, 3, 1, 23, 37, 52] 49 [3, 1, 11, 23, 37, 52] 50 [1, 3, 11, 23, 37, 52] 51 '''
可以看到以上排序每次步骤一致,只有一个变量(即不用对比最后一个元素)
因此,可以再设置一个变量j, 作为循环时候的变量简化操作,由此得到:
1 li = [52, 37, 23, 11, 3, 1, ] 2 print(li) 3 4 for j in range(1, len(li)): 5 for i in range(len(li) - j): 6 if li[i] > li[i + 1]: 7 temp = li[i] 8 li[i] = li[i+1] 9 li[i + 1] = temp 10 print(li) 11 ''' 12 结果: 13 [52, 37, 23, 11, 3, 1] 14 [37, 23, 11, 3, 1, 52] 15 [23, 11, 3, 1, 37, 52] 16 [11, 3, 1, 23, 37, 52] 17 [3, 1, 11, 23, 37, 52] 18 [1, 3, 11, 23, 37, 52] 19 '''