【问题标题】:Why does this implementation of QuickSort not work?为什么快速排序的这种实现不起作用?
【发布时间】:2019-10-11 23:08:09
【问题描述】:

我尝试将 Quicksort 代码从 Java 转换为 Python,但没有成功。有人可以告诉我问题出在哪里吗?我得到了“比较中超出了最大递归深度”,但在我的示例中,我只想订购少于 10 个整数,所以我认为这不是真正的问题......

def help(array, low, high):
    pivot = array[low]
    fromhigh = high
    fromlow = low
    while True:
        while(array[fromhigh]>pivot):
            fromhigh = fromhigh-1
        while(array[fromlow]<pivot):
            fromlow = fromlow+1
        if(fromlow<fromhigh):
            array[fromlow], array[fromhigh] = array[fromhigh], array[fromlow]
        else:
            return fromhigh


def quickSort(array, low, high):
   if (low<=high):
       pivot = help(array, low, high)
       quickSort(array, low, pivot)
       quickSort(array, pivot + 1, high)


#Testarray
array = [10, 7, 2 , 8, 9, 1, 5, 11, 13]
n = len(array)
quickSort(array, 0, n-1)
print("Sorted Array:")
for i in range(n):
    print("%d" % array[i]),

【问题讨论】:

  • 在帮助函数中,当你退出while语句时没有条件,所以你需要在那里添加条件,当fromlow>fromhigh thn退出while loop else交换元素

标签: python sorting recursion quicksort


【解决方案1】:

如果您在quickSort 函数的开头添加print(low, high),您会注意到它一直打印0 0,直到它崩溃。

if 条件不正确。应该是 low &lt; high 而不是 low &lt;= high,因为您不想继续对单元素子数组进行排序。

【讨论】:

  • 非常感谢!您知道如何更改代码,以便对相同的数字进行排序吗?
  • @KilianKunkel 你可以看到这个寻求帮助:help1help2
猜你喜欢
  • 2016-02-17
  • 2019-07-31
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2020-06-21
相关资源
最近更新 更多