冒泡排序:理解递归

问题描述

我是编程、数据结构和算法的新手。我理解程序,我不明白的是为什么它递归地做我想要的?我想我要问的是为什么它在通过列表一次后不停止?它一直持续到整个列表被排序。

def bubblesort(numbers):
    for i in range(len(numbers)):
        for j in range(len(numbers) - 1):
            if(numbers[j] > numbers[j+1]):
                temp = numbers[j]
                numbers[j] = numbers[j+1]
                numbers[j+1] = temp

解决方法

有两个循环。内循环在外循环的每次迭代中遍历整个列表。

现在注意这一点:

内循环将保证最大的值“冒泡”——在它参与的每一次交换中——到最右边。因此,在此内循环第一次完成后,最大值将到达其最终位置。

这个内循环重新启动的第二次,我们可以将列表想象成短一个元素:想象一下最右边(即最大)的值不存在。然后我们有一个类似的情况:保证 now 的最大值被移到最右边。内部循环还将这个“最大”值与我们忽略的值(实际上位于最右侧)进行比较,但显然它们不会被交换。所以在 第二次 时间之后,这个内部循环完成它的遍历,我们在最右边有 两个 最大值,在它们的最终位置。

所以,这里有一个模式。如果内部循环执行(总共)10 次,那么最后我们将在最右侧获得最大的 10 个值。这就是 循环进行与列表中的值一样多的迭代的原因。这样就可以保证我们已经对整个列表进行了排序。

,

好吧,如果我正确地回答了您的问题,那么您要理解的重点是为什么您的代码会多次运行您的列表,而不是只运行一次,对吗?

你在另一个里面有一个 for,这样,在第 2 行你开始了一个循环,它将遍历数字数组。对于 EVERY 第一个循环的重复,您将在第 3 行执行另一个循环,因此,每次您在第 2 行运行数组时,您都会在第 3 行再次运行它。

这是冒泡排序的主要问题之一,即使在排序后,您仍将继续运行数组。