注意错误点 IndexError: list index out of range (列表索引超出范围)
冒泡循环 典型的2层 for 循环 ,for1(最外层) 和 for2(内层循环)。
在冒泡循环中 外层for1 循环的次数代表的 是 列表中 所有数 比较的次数。一般情况为
range(1,len(list1))或者 range(0,len(list1)-1)
在内层循环中 循环次数代表的是 剩余元素之间 两两比较,外层每比较一次,内层就要减少一次,所以
range(0,len(list1)-i) 或者 range(0,len(list1)-i-1)
range()不论内外层 都要做 减一的排序,因为两两 比较最后一个元素 是不用再去比较的
从下面的例子可以看出 range(1,len(list1))与range(0,len(list1)-i) 是一对 for1 for2循环
range(0,len(list1)-i-1)与 range(0,len(list1)-i-1) 也是一对for1(外层) for2(内层)循环
#例子1
sum1= 0 #比较次数
list1 = [4, 4, 5, 6, 7, 8, 3, 5,9]
for i in range(1, len(list1)): # 注意这里的起始下标为从一开始
for j in range(0, len(list1) - i): # 最后一个自己不用和自己比较所以,可以少一次
sum1 +=1
if list1[j] > list1[j + 1]:
list1[j], list1[j + 1] = list1[j + 1], list1[j]
print(list1)
print(sum1)
#例子2
sum = 0
list2 = [45, 4, 6, 5, 9, 7, 8, 3, 45]
for i in range(0, len(list2) - 1): # 最后一个自己不用和自己比较所以,可以少一次
for j in range(0, len(list2) - i - 1): # 每执行一次将本次循环中最大的元素放入对应末尾,所以减去i,少执行对应次数
sum += 1
if list2[j] > list2[j + 1]:
list2[j], list2[j + 1] = list2[j + 1], list2[j]
print(list2)
print(sum)