私は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++で働いていたが、それは次のエラー
**
トレースバック(最新の呼び出しの最後)を示しています。
-
で
- ファイル "のpython"、ライン28を、
- ファイル迅速
- ファイル "パイソン" の迅速な
- ファイル "パイソン" の "パイソン"、17行、17行、17行、で迅速な は、[前の行を繰り返し990回以上]
- ファイルパーティション内の迅速な
- ファイル "パイソン" の "パイソン"、16行目、8行目、
- RecursionError:比較 に超えた最大再帰の深さ
助けてください。ありがとうございました。
? –
これはおそらく、この問題を解決するのに役に立たないですが、スタイルのヒント:あなたは[A] ' – Kevin
'配列[A]、配列[B] =配列[B]、配列をすることによって、一時的な値を使用せずにPythonで2つの値を入れ替えることができますなぜなら、 'return'の' i'の値は** global ** 'i'を指しているからです。あなたの' partition'関数*は常に '(n-1)'を返します。 forループで最後に設定された 'for range(0、n):'、 'return l'を意味しましたか?しかし、あなたは本当に本当に**グローバルな状態に頼るべきではありません。 –