Python语言中的快速排序错误 我对Python很新,所以为了熟悉语法,我正在制作我在C++和java中编写的程序。 def swap(p , q): temp = array[p] array[p] = array[q] array[q] = temp def partition(beg , end): l = beg x = array[beg] for j in range(l+1,end) : if(array[j] <= x): l += 1 swap(l , j) swap(l, beg) return l def quick(beg , end): if(beg <= end): mid = partition(beg , end) quick(beg , mid - 1) quick(mid + 1 , end) array = [] n=int(input("\nEnter the number of terms: ")) print("\nEnter the terms") for i in range(0,n): val = int(input()) array.append(val) print("\nBefore Sorting: ") print(array) quick(0 , n) print("\nAfter Sorting: ") print(array)

Python语言中的快速排序错误 我对Python很新,所以为了熟悉语法,我正在制作我在C++和java中编写的程序。 def swap(p , q): temp = array[p] array[p] = array[q] array[q] = temp def partition(beg , end): l = beg x = array[beg] for j in range(l+1,end) : if(array[j] <= x): l += 1 swap(l , j) swap(l, beg) return l def quick(beg , end): if(beg <= end): mid = partition(beg , end) quick(beg , mid - 1) quick(mid + 1 , end) array = [] n=int(input("\nEnter the number of terms: ")) print("\nEnter the terms") for i in range(0,n): val = int(input()) array.append(val) print("\nBefore Sorting: ") print(array) quick(0 , n) print("\nAfter Sorting: ") print(array),python,Python,这是我用Python编写的用于快速排序的代码。在C++中使用相同的范围,但它显示了以下错误 ** 回溯最近一次呼叫上次: 文件python,第28行,在 文件python,第17行,快速 文件python,第17行,快速 文件python,第17行,快速 [上一行重复了990次] 文件python,第16行,快速 文件python,第8行,在分区中 RecursionError:比较中超出了最大递归深度 请帮忙。谢谢。可能是因为分区返回i。这似乎是用于接收原始输入的循环变量。因此,当您在quic

这是我用Python编写的用于快速排序的代码。在C++中使用相同的范围,但它显示了以下错误

**

回溯最近一次呼叫上次:

文件python,第28行,在 文件python,第17行,快速 文件python,第17行,快速 文件python,第17行,快速 [上一行重复了990次] 文件python,第16行,快速 文件python,第8行,在分区中 RecursionError:比较中超出了最大递归深度
请帮忙。谢谢。

可能是因为分区返回i。这似乎是用于接收原始输入的循环变量。因此,当您在quick函数中调用partition来获取mid时,您会一次又一次地得到相同的值。在python中,循环变量会在循环运行完成后保留。

您的程序有许多与边界条件相关的错误。这是根据您的代码修改的有效解决方案。注意,我已将swap更改为使用python首选方法

def swap(p , q):
    array[p],array[q] = array[q],array[p]

def partition(beg , end):
    l = beg - 1
    x = array[end]
    for j in range(beg,end) :
        if(array[j] <= x):
            l += 1
            swap(l , j)
    swap(l+1, end)
    return l+1

def quick(beg , end):
    if(beg < end):
        mid = partition(beg , end)
        quick(beg , mid - 1)
        quick(mid + 1 , end)


array = []
n=int(input("\nEnter the number of terms: "))
print("\nEnter the terms")
for i in range(0,n):
    val = int(input())
    array.append(val)
print("\nBefore Sorting: ")
print(array)
quick(0 , n-1)
print("\nAfter Sorting: ")
print(array)

n的值是多少?这可能对解决这个问题没有帮助,但是风格提示:通过执行array[a],array[b]=array[b],array[a],可以在Python中交换两个值,而无需使用临时值。一个明显的错误是,分区函数总是返回n-1,因为这是返回i的值,所以i指的是全局i,它是for循环中最后设置的,对于范围为0的i,n:,您的意思是返回l吗?但是你真的不应该依赖全局状态,Python有一个最大的循环次数或者递归调用函数的次数。我相信价值观会随着系统的变化而变化,但有一种方法可以改变它。实际上,最好只是将一大块数据分成更小的部分,然后将较大的数据缩小为越来越小的数据。@PrestonHager确实如此,但这段代码的问题是它会无限递归。