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]
。
在这种情况下可以省略外括号。这些行所做的基本上是交换元素j
和j+1
的arr
。
没有数组解构的类似语句是:
tmp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp
【讨论】:
我相信这里的括号比括号好。 不过,它可能也适用于括号。 但是括号创建的是数组,而不是元组。 没错,我承认你应该尽可能在数组上使用元组,但我仍然坚持我的观点,即它们仍然可以用于解构。 (我习惯于 javascript 中的括号。)以上是关于Python中的冒泡排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章