python快速排序,1万个数,stack overflow

快排代码:

import sys
sys.setrecursionlimit(100000)
def mysqort(arr, low, high):

    if low >= high:
        return
    i = low
    j = high
    base = arr[low]
    while(i<j):
        while(i<j and arr[j] > base):
            j -= 1
        if(i<j):
            arr[i] = arr[j]
            i = i + 1
        while(i<j and arr[i] < base):
            i += 1
        if(i<j):
            arr[j] = arr[i]
            j -= 1
    arr[i] = base
    mysqort(arr,low,i-1)
    mysqort(arr,i+1,high)
#创建10000个数
arr = list(range(10000))
#数组反转,为了排序的时候递归多一点
arr.reverse()
#排序
mysqort(arr,0,9999)
#堆栈溢出
print(arr)

很惊讶10000个数都做不了排序,网上有说递归深度有做限制,sys.setrecursionlimit(100000),这里也设置了,为什么10000个数的快排,会堆栈溢出?
又去写了一个递归:

import sys
sys.setrecursionlimit(100000000)
def rec(n):
    print(n)
    rec(n+1)
rec(1)

print到8657开始报堆栈溢出问题

阅读 2.6k
1 个回答
推荐问题