冒泡排序是最基础的编程。
但久了很容易忘记角标。
a = [5, 3, 2, 6, 1, 4]
n = len(a)
for i in range(n - 1):
for j in range(n - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
也就是range(n - 1)和range(n - 1 - i)。
可以这样来理解。
冒泡排序需要两两比较,外层循环的i,从0开始,到倒数第二个结束,这里n - 1,防止数据越界。
内层循环的j,从0开始,到哪里结束呢?
外层i每迭代一次,就冒了一个元素到最后面去,已经冒好的元素不需要比较了。
这里n - 1 - i,就是减去了已经冒好的元素。
理解之后,就不容易忘记了。