我正在创建对数组进行快速排序的pyscript。听起来很简单,但是我正在努力。我拥有的数组的长度超过7000。我使用了以下行:
sys.setrecursionlimit(100000)
允许python执行最多100000次的任何递归代码。因此,这不是递归限制错误。但是,当我使用quicksort方法时,quicksort方法之后的任何代码都不会执行。 这不是一个无限循环,因为提示会显示一个输入点,让我输入下一行代码或退出代码0消息。 我在pycharm和命令提示符中运行了它,但快速排序之后的任何代码(例如简单的print(1))仍然无法运行。我将我的快速排序复制并粘贴到另一个文件中,并针对较小的数据样本对其进行了测试,它可以按预期工作。有谁能提供解决我问题的见识?
这是我的quickSort方法:
def partition(arr, arr2, low, high):
i = low - 1
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
arr2[i], arr2[j] = arr2[j], arr2[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
arr2[i + 1], arr2[high] = arr2[high], arr2[i + 1]
return i + 1
def sort(arr, arr2, low, high):
if low < high:
pi = partition(arr, arr2, low, high)
sort(arr, arr2, low, pi - 1)
sort(arr, arr2, pi + 1, high)
答案 0 :(得分:1)
尝试以下更改:
i = low # low instead of low-1
# ...
if arr[j] < pivot: # < instead of <=
# ...
arr[i], arr[high] = arr[high], arr[i] # i instead of i+1
arr2[i], arr2[high] = arr2[high], arr2[i] # i instead of i+1