Python 冒泡排序:理解递归

Python 冒泡排序:理解递归,python,algorithm,sorting,data-structures,bubble-sort,Python,Algorithm,Sorting,Data Structures,Bubble Sort,我不熟悉编程、数据结构和算法。我理解这个程序,但我不明白的是为什么它会递归地做我想做的事情?我想我要问的是,为什么它在列表中出现一次后不停止?它一直运行,直到整个列表被排序 def bubblesort(numbers): for i in range(len(numbers)): for j in range(len(numbers) - 1): if(numbers[j] > numbers[j+1]):

我不熟悉编程、数据结构和算法。我理解这个程序,但我不明白的是为什么它会递归地做我想做的事情?我想我要问的是,为什么它在列表中出现一次后不停止?它一直运行,直到整个列表被排序

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

好吧,如果我没有弄错你的问题,那么你想理解的一点是为什么你的代码运行列表的时间是成倍的,而不是只运行一次,对吗

在另一行中有一个for,通过这种方式,在第2行中开始了一个循环,它将遍历数字数组。对于第一个循环的每一次重复,您都在第3行执行另一个循环,因此,每次在第2行运行数组时,您都在第3行再次运行它


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

有两个循环。对于外循环的每次迭代,内循环遍历整个列表

现在请注意:

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

第二次重新启动这个内部循环时,我们可以想象列表缩短了一个元素:只需想象最右边(即最大)的值不存在。然后我们有一个类似的情况:现在最大的价值肯定会转移到极右翼。内部循环也会将这个“最大”值与我们忽略的值(实际上位于最右侧)进行比较,但显然它们不会被交换。所以第二次,这个内环做遍历,我们在最右边的两个最大值,在最后的位置。< /P>
所以,这里有一个模式。如果内循环被执行(在其总体中)10次,那么在最后,我们将在最右边得到最大10个值。这就是为什么外部循环的迭代次数与列表中的值相同。这样可以保证我们将对整个列表进行排序。

作为旁白:这不是递归这里没有递归,只有两个嵌套的迭代循环。内部循环遍历列表一次。。。每次执行外部循环时,请准确地向我们展示您在跟踪此代码中的中间表达式时不理解的内容。“向我解释这个代码块”超出了堆栈溢出的范围:解构复合表达式,并告诉我们关于其中一个或两个操作的不理解之处。请参阅。这是一个基本的冒泡排序——逻辑和详细操作已经在许多站点上记录。你应该在发布之前做的研究中找到这些。