快速分类处理非常大的数据集问题

时间:2019-10-14 04:16:37

标签: python quicksort

我正在创建对数组进行快速排序的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)  

1 个答案:

答案 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