【问题标题】:Bubble Sort in Python [duplicate]Python中的冒泡排序[重复]
【发布时间】: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] 是如何工作的?

【问题讨论】:

    标签: python arrays sorting bubble-sort


    【解决方案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])

          这意味着:

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

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

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

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

          【讨论】:

          • 我相信这里的括号比括号好。
          • 不过,它可能也适用于括号。
          • 但是括号创建的是数组,而不是元组。
          • 没错,我承认你应该尽可能在数组上使用元组,但我仍然坚持我的观点,即它们仍然可以用于解构。 (我习惯于 JavaScript 中的括号。)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-24
          • 1970-01-01
          • 2017-07-29
          • 2019-06-20
          • 2021-04-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多