Python中的冒泡排序[重复]

Posted

技术标签:

【中文标题】Python中的冒泡排序[重复]【英文标题】:Bubble Sort in Python [duplicate] 【发布时间】:2018-07-10 05:32:42 【问题描述】:

我在 python 中有这个bubbleSort function 可以完美运行。

def bubbleSort(arr):
n = len(arr)

# Traverse through all array elements
for i in range(n):

    # Last i elements are already in place
    for j in range(0, n-i-1):

        # traverse the array from 0 to n-i-1
        # Swap if the element found is greater
        # than the next element
        if arr[j] > arr[j+1] :
            arr[j], arr[j+1] = arr[j+1], arr[j]

我是 python 新手,无法理解 if 语句下方的代码。 arr[j], arr[j+1] = arr[j], arr[j+1] 是如何工作的?

【问题讨论】:

【参考方案1】:

如果您来自其他编程语言,您可能不熟悉使用单个语句分配多个变量的概念。

这就是这里发生的事情。

Ii I x, y = 3, 4 然后 x 的值为 3,y 的值为 4

在这种情况下

arr[j], arr[j+1] = arr[j+1], arr[j] 可以改写为

arr[j] = arr[j+1]arr[j+1] = arr[j]

但是,这不会交换变量(正如@Dimitar 所说,这发生在单个语句中)。它确实需要重写为

temp = arr[j]arr[j] = arr[j+1]arr[j+1] = temp

我希望你能明白为什么

【讨论】:

【参考方案2】:

在 Python 中,可以直接分配元组。所以下面的代码

arr[j], arr[j+1] = arr[j+1], arr[j]

这样写你会更好理解

(arr[j], arr[j+1]) = (arr[j+1], arr[j])

代码首先创建一个包含(arr[j+1], arr[j])的元组,然后将其对应地分配给arr[j], arr[j+1],这实际上交换了两个元素。

在其他语言中,你必须写

temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp

这在 Python 中是不必要的,因为您可以直接分配元组。

【讨论】:

【参考方案3】:

基本上它只是交换arr[j]arr[j+1] 的值。 arr[j] 获取arr[j+1] 的值,arr[j+1] 获取arr[j] 的值。

【讨论】:

【参考方案4】:

最后一行也可以写成: (arr[j], arr[j+1]) = (arr[j+1], arr[j])

这意味着:

    将元素 arr[j+1]arr[j] 打包到一个数组中。 再次打开包装。 将它们分配给arr[j]arr[j+1]

在这种情况下可以省略外括号。这些行所做的基本上是交换元素jj+1arr

没有数组解构的类似语句是:

tmp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp

【讨论】:

我相信这里的括号比括号好。 不过,它可能也适用于括号。 但是括号创建的是数组,而不是元组。 没错,我承认你应该尽可能在数组上使用元组,但我仍然坚持我的观点,即它们仍然可以用于解构。 (我习惯于 javascript 中的括号。)

以上是关于Python中的冒泡排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python编码实现冒泡排序

Python 冒泡排序

python冒泡排序

python的冒泡排序

python笔记2-冒泡排序

Python—冒泡排序算法