私はPythonが初めてです。整数値を昇順でソートするためのクイックソートのコードを書いた。範囲外のリストインデックスが、私は同じ入力と同じコードを実行した場合、それは正しい出力を与える: - Ubuntuの16.10とpython3.5Python 3.4で同じ入力サイズの同じコードで複数の時間を実行した後、IndexErrorがスローされません:リストインデックスが範囲外です
コード -
import random
a=[]
n=int(input("Enter size :\n"))
for i in range(0,n):
a.append(int(random.randrange(0,100)))
print("Before Sorting:",a)
def quick(a,low,high):
if(low<high):
i=low
j=high
key=a[low]
flag=1
while (flag==1):
i += 1
while(a[i]<key):
i += 1
while (a[j]>key):
j -= 1
if (i<j):
a[i],a[j]=a[j],a[i]
else:
flag=0
a[low],a[j]=a[j],a[low]
quick(a,low,j-1)
quick(a,j+1,high)
# Calling function quick where a = List, 0 = Start Index ,n-1 = Last Index
quick(a,0,n-1)
print("After Sorting:",a)
私は、コードを実行すると、それははIndexErrorをスローを使用して 。例えば - N = 5
Enter size :
5
Before Sorting : [6, 5, 93, 84, 32]
Traceback (most recent call last):
File "quick.py", line 30, in <module>
quick(a,0,n-1)
File "quick.py", line 27, in quick
quick(a,j+1,high)
File "quick.py", line 17, in quick
while(a[i]<key):
IndexError: list index out of range
を用いて3回目のコードを実行して2回目のコードを実行してN = 5
[email protected]:~/PYTHON/practice/run1$ python3 quick.py
Enter size :
5
Before Sorting : [55, 23, 57, 86, 20]
Traceback (most recent call last):
File "quick.py", line 30, in <module>
quick(a,0,n-1)
File "quick.py", line 27, in quick
quick(a,j+1,high)
File "quick.py", line 17, in quick
while(a[i]<key):
IndexError: list index out of range
と1回目のコードを実行し、N = 5
[email protected]:~/PYTHON/practice/run1$ python3 quick.py
Enter size :
5
Before Sorting : [87, 18, 94, 1, 64]
After Sorting : [1, 18, 64, 87, 94]
これはなぜ発生するのかわかりません。 私はUbuntuの16.10とpython3.5
問題があなたのソートにあります。 ubuntu 16.10やpython 3.5では問題ありません。あなたのデータはランダムですので、例外が発生しない場合もあります – mohammad