【问题标题】:Problems in Quick Sort Code快速排序代码中的问题
【发布时间】:2018-05-27 19:13:16
【问题描述】:

我的快速排序代码有问题。我是编码和python(python 3.6)的新手,任何帮助将不胜感激。我已经在网上看到了几种快速排序的实现,但我想弄清楚我的代码到底出了什么问题。我在下面粘贴我的代码:

def Partition(A):
    q = A[0]
    i = 1
    for j in range(1, len(A)):
        if A[j] < q:
            A[j], A[i] = A[i], A[j]
            i = i + 1
    A[0], A[i - 1] = A[i - 1], A[0]
    return i - 1

def QuickSort(A):
    if len(A) <= 1:
        return A
    else:
        q = Partition(A)
        QuickSort(A[ : q])
        QuickSort(A[q + 1 : ])
        return A

A = [7, 5, 4, 1, 3, 6, 2, 8]
Sorted = []
Sorted = QuickSort(A)
print(Sorted)

对于上面的输入,我得到的是输出 [2, 5, 4, 1, 3, 6, 7, 8] 而不是按升序排列的列表。

【问题讨论】:

  • 你能描述什么是错误的或者你期望什么输出以及你得到什么?转储代码并询问它有什么问题是堆栈溢出的题外话
  • @StefanPochmann 请帮我写代码。

标签: python python-3.x sorting quicksort


【解决方案1】:

这些尝试对A复制部分进行排序:

    QuickSort(A[ : q])
    QuickSort(A[q + 1 : ])

他们返回一些东西,但你忽略了他们返回的东西,所以它丢失了。你应该把他们的结果写回A

    A[ : q] = QuickSort(A[ : q])
    A[q + 1 : ] = QuickSort(A[q + 1 : ])

此更改后,您的结果是预期的[1, 2, 3, 4, 5, 6, 7, 8]

【讨论】:

  • 清理我的评论记录。你把我叫出来是对的,我过去很享受我们的性能讨论:) 被弹射到编程中的问题是你不知道你的盲点......但我是一名工程师;我所知道的关于编程的一切最终都来自这个网站。
  • @roganjosh Heh...不确定 SO 是学习编程的最佳方式 :-)。我确实来这里练习和学习更多,但是例如当我最近接触 Ruby 时,我阅读了一本 Ruby 初学者的书。
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2017-01-14
  • 2020-08-14
  • 2016-10-02
  • 1970-01-01
相关资源
最近更新 更多