python- 冒泡算法

#### 冒泡算法 ####
# a 和 b 的值互换
a = 111
b = 222
test = a # test = 111
a = b # a = 222
b = test # b = 111

li = [44, 12, 22, 33, 456, 1, 10]
# print(len(li)) # 7
# for j in range(len(li)):
# print(j)
# 0 1 2 3 4 5 6 7 # range默认是从0 开始的。
for i in range(len(li) - 1): # 此处的-1 是因为,len(li) = 7 ,而做比较的时候i = 7 是最大的,没有i + 1
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [12, 22, 33, 44, 1, 10, 456] 默认将最大的一个数排序到了最后。
# ### 排序列表中第二个最大的值 ###
for i in range(len(li) - 2): # 此处的-2 是因为,最后一个数已经是最大的了,要排除掉,排除掉以后就是第二大的了。
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [12, 22, 33, 1, 10, 44, 456]
# ### 排序列表中第三个最大的值 ###
for i in range(len(li) - 3): # 此处的-3 是因为,最后1和2的数已经是最大的了,要排除掉,排除掉以后就是第三大的了。
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [12, 22, 33, 1, 10, 44, 456]

# 通过以上的测试,我们发现一个道理,只有最后-1 ,-2, -3 在变,其他都没有变换,可以用一个变量来替换。
# for i in range(len(li) - 1):
# for i in range(len(li) - 2):
# for i in range(len(li) - 3):
for jj in range(1, len(li)): # 此处的1,是从1 开始,而不是从0 开始,因为-0 还是那个,没有意义。
for i in range(len(li) - jj):
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [1, 10, 12, 22, 33, 44, 456]
我的目标是每天厉害一点点
原文地址:https://www.cnblogs.com/sidaofeng/p/10167476.html