假定:有 1 个乱序的数列 nums ,其中有 n 个数。
要求:排好序之后是 从小到大 的顺序。
冒泡排序算法
代码
from swap import swap
def bubble_sort(nums):
n = len(nums)
for i in range(n-1):
j = 1
while j <= n-i-1:
if nums[j-1] > nums[j]:
swap(nums, j-1, j)
j += 1
(对外层循环的循环次数range(len(nums)-1)
的解释:
range(n-1)
即 [0, 1, 2, 3, ..., n-2]
,共 n-1 个数;
如果有 1 个数,
则需要 0 轮外层循环,即无需排序;
如果有 2 个数,
则需要 1 轮外层循环;
如果有 3 个数,比如 [3, 2, 1],
第 0 轮外循环之后,数列为 [2, 1, 3],
第 1 轮外循环之后,数列为 [1, 2, 3],
则需要 2 轮外层循环;
。。。
如果有 n 个数,
则需要 n-1 轮外层循环。
)
原理
第 i 次循环中,对从第 0 到第 n-i-1 个元素从前往后进行比较,每次比较相邻的两个元素,如果前一个元素大于后一个元素