2017-09-25 7 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. トレースバック(最新の呼び出しの最後)を示しています。

    • ファイル "のpython"、ライン28を、
    • ファイル迅速
    • ファイル "パイソン" の迅速な
    • ファイル "パイソン" の "パイソン"、17行、17行、17行、で迅速な
    • は、[前の行を繰り返し990回以上]
    • ファイルパーティション内の迅速な
    • ファイル "パイソン" の "パイソン"、16行目、8行目、
    • RecursionError:比較
    • に超えた最大再帰の深さ

助けてください。ありがとうございました。

+0

? –

+1

これはおそらく、この問題を解決するのに役に立たないですが、スタイルのヒント:あなたは[A] ' – Kevin

+0

'配列[A]、配列[B] =配列[B]、配列をすることによって、一時的な値を使用せずにPythonで2つの値を入れ替えることができますなぜなら、 'return'の' i'の値は** global ** 'i'を指しているからです。あなたの' partition'関数*は常に '(n-1)'を返します。 forループで最後に設定された 'for range(0、n):'、 'return l'を意味しましたか?しかし、あなたは本当に本当に**グローバルな状態に頼るべきではありません。 –

答えて

0

おそらくpartition戻りiので。これは元の入力を取り入れるためのループ変数のようです。だから、quick関数のmidを得るためにpartitionと呼ぶと、同じ値を何度も何度も何度も繰り返しています。 Pythonでは、ループが実行された後にループ変数が固執します。

1

プログラムには境界条件に関連するいくつかのエラーがあります。ここでは、あなたのコードに基づいて修正された、働く解決策があります。私は、Pythonの推奨アプローチを使うようにスワップを変更したことに注意してください。使用しているn個のどのような値

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) 
関連する問題