2017-09-25 29 views
0

我是python的新手,所以爲了熟悉語法,我正在編寫我已經在C++和Java中創建的程序。Python語言中的快速排序錯誤

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. 回溯(最近最後一次通話):

    • 文件 「蟒蛇」,第28行,在
    • 文件 「蟒蛇」,第17行,在快速
    • 文件 「蟒蛇」,第17行,在快速
    • 文件 「蟒蛇」,第17行,在快速
    • [上線重複990次以上]
    • 文件 「蟒」,第16行,在快速
    • 文件 「蟒」,第8行,在分區
    • RecursionError:最大遞歸深度相比
    • 超過

請幫忙。謝謝。

+0

你使用了什麼樣的n值? –

+1

這可能無助於解決這個問題,但風格提示:通過執行'array [a],array [b] = array [b],array [a]' – Kevin

+0

可以交換Python中的兩個值而不使用臨時值那麼,一個明顯的問題是你的'partition'函數*總是返回*'(n-1)',因爲這是'return i'中的'i'的值,指的是** global **'i',這是最後一次在for循環中設置的,對於範圍(0,n)中的我:',你的意思是'return l'?但是你真的不應該依賴全球化的狀態。 –

回答

0

可能是因爲partition返回i。這似乎是你接受原始輸入的循環變量。因此,當您撥打partition以獲得quick函數中的mid時,您將一次又一次獲得相同的值。在python中,循環變量在循環完成後停留。

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)