Python语言中的快速排序错误

时间:2017-09-25 17:34:13

标签: 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中用于快速排序的代码。它在c ++中使用相同的范围,但它显示以下错误

**

  1. 回溯(最近一次呼叫最后一次):

    • 文件&#34; python&#34;,第28行,
    • 文件&#34; python&#34;,第17行,快速
    • 文件&#34; python&#34;,第17行,快速
    • 文件&#34; python&#34;,第17行,快速
    • [上一行重复990次]
    • 文件&#34; python&#34;,第16行,快速
    • 文件&#34; python&#34;,第8行,分区
    • RecursionError:比较超出最大递归深度
  2. 请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

您的程序有许多与边界条件相关的错误。以下是基于您的代码的修改和工作解决方案。请注意,我已将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)

答案 1 :(得分:0)

可能是因为partition返回i。这似乎是你接受原始输入的循环变量。因此,当您致电partition以获取mid功能中的quick时,您会一遍又一遍地获得相同的值。在python中,循环变量在循环完成后继续存在。