这条线在排序算法中意味着什么(气泡示例)

What does this line mean in Sorting Algo(Bubble example)

def bubbleSort(array):
    swapped = False
    for i in range(len(array)-1,0,-1):
        print(i)
        for j in range(i):
            print(j)
            if array[j]>array[j+1]:
                array[j], array[j+1] = array[j+1], array[j]
                swapped= True
        if swapped:
            swapped=False
        else:
            break
    print(array)

bubbleSort([5, 2, 1, 3])

我应该如何解释这一行:for i in range(len(array)-1,0,-1)?我对 0-1 参数的需求感到特别困惑。

那一行发生了一些事情,我将给出简化的解释(我假设这段代码是用 Python 编写的)。

首先,for i in iterable 将循环遍历 iterable,这意味着 for 循环中的代码将重复与 iterable 中的元素一样多的次数,这可能是一个数组,一个列表,一个字符串等,每次循环时,i 将是 iterable 的下一个元素,从第一个开始。比如for i in [1, 2, 3]会循环3次;第一次,i 将等于 1;第二个,2,等等

接下来,range 函数生成一个可迭代的数字范围,例如 0-9。使用单个参数,range 将产生从 0 到该数字的范围,但在它之前停止,例如range(5) 会给你 [0, 1, 2, 3, 4]。因此,如果您要使用 for i in range(5),您的代码将重复 5 次,其中 i 从 0 递增到 4。

有两个参数时,范围将从第一个开始并在第二个之前停止,第二个必须大于第一个。例如,range(3, 8) 会给你 [3, 4, 5, 6, 7]。然而,range(8, 3) 将不起作用,因为起始编号大于终止编号。这意味着你不能只用 2 个参数倒数。

range的第三个可选参数是步长;您希望数字每步增加 或减少 多少。例如,range(0, 10, 2) 将为您提供输出 [0, 2, 4, 6, 8],在 10 之前停止。您可以在此处通过将 step 参数设置为负数来生成递减范围。 range(10, 0, -2) 会给你 [10, 8, 6, 4, 2],在第二个参数之前再次停止,range(10, 0, -1) 会给你完整的 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1].

最后,len(iterable) 函数会给出你给它的任何长度,或者列表中包含的项目数。例如 len("Hello!") 会给你 6,而 len([1, 2, 3, 4, 5]) 会给你 5.

将这些放在一起,行 for i in range(len(array)-1, 0, -1) 将执行以下操作:

  • 代码将重复列表中的项目的次数,其中 i 取列表中的每个值
  • 该列表是一个数字范围
  • 范围的起始编号是array的长度减去一个
  • 范围的末尾是 0
  • 范围递减,步长为-1

因此,如果 array["fish", "banana", "pineapple", "onion"]len(array) 将是 return 4,所以你将得到 for i in range(3, 0, -1),它将循环 3 次,其中 i 是 3,然后是 2,然后是 1。

这是一个相当简单的答案,所以我建议您查找一些有关您不理解的功能的教程。