Python 知道我在快速排序中为两个函数使用的列表是相同的吗?
Python knows that the list I am using for both functions in quicksort are the same?
我在 Python 中使用快速排序算法,它交换值。我的问题是 Python 如何知道我在 Partition 和 quicksort 函数中使用相同的列表?
正如您在下面的快速排序代码中看到的那样,值位置的交换只发生在分区函数中。然而,无需对快速排序函数执行 return 列表,它知道我交换了分区中列表值的位置,从而打印排序后的列表。
def quicksort(lst, start = 0, end = None):
if end is None:
end = len(lst) - 1
if start >= end:
return
p = partition(lst, start, end)
quicksort(lst, start, p-1)
quicksort(lst, p+1, end)
def partition(lst, start, end):
pivot = lst[start]
low = start + 1
high = end
while low <= high:
while lst[low] <= pivot:
low += 1
while lst[high] >= pivot:
high -= 1
if low <= high:
lst[low], lst[high] = lst[high], lst[low]
low += 1
high -= 1
lst[start], lst[high] = lst[high], lst[start]
return high
numbers = [7, 6, 2, 4, 9, 1000]
quicksort(numbers)
print(numbers)
如果我问了一些多余的东西,请接受我的谦虚道歉,因为我找不到任何与此相关的信息。我目前正在通过 team treehouse 学习算法,但是除了关于 quicksort 的视频没有太多解释之外,他们似乎没有任何相关内容。如果您知道某个地方有更多这方面的信息,如果您能与我分享,将不胜感激!谢谢。
这是因为在 python 中值是通过引用传递的。当您将 lst
传递给 partition
函数时,您实际上是在 quicksort
函数中传递对列表的引用,而不是列表的副本。
我在 Python 中使用快速排序算法,它交换值。我的问题是 Python 如何知道我在 Partition 和 quicksort 函数中使用相同的列表?
正如您在下面的快速排序代码中看到的那样,值位置的交换只发生在分区函数中。然而,无需对快速排序函数执行 return 列表,它知道我交换了分区中列表值的位置,从而打印排序后的列表。
def quicksort(lst, start = 0, end = None):
if end is None:
end = len(lst) - 1
if start >= end:
return
p = partition(lst, start, end)
quicksort(lst, start, p-1)
quicksort(lst, p+1, end)
def partition(lst, start, end):
pivot = lst[start]
low = start + 1
high = end
while low <= high:
while lst[low] <= pivot:
low += 1
while lst[high] >= pivot:
high -= 1
if low <= high:
lst[low], lst[high] = lst[high], lst[low]
low += 1
high -= 1
lst[start], lst[high] = lst[high], lst[start]
return high
numbers = [7, 6, 2, 4, 9, 1000]
quicksort(numbers)
print(numbers)
如果我问了一些多余的东西,请接受我的谦虚道歉,因为我找不到任何与此相关的信息。我目前正在通过 team treehouse 学习算法,但是除了关于 quicksort 的视频没有太多解释之外,他们似乎没有任何相关内容。如果您知道某个地方有更多这方面的信息,如果您能与我分享,将不胜感激!谢谢。
这是因为在 python 中值是通过引用传递的。当您将 lst
传递给 partition
函数时,您实际上是在 quicksort
函数中传递对列表的引用,而不是列表的副本。