前提・実現したいこと
クイックソートの実装
発生している問題・エラーメッセージ
クイックソートを実装しようとしたところ、以下のようなコードになりました。
しかし、エラーが起こったり起こらなかったりします。(エラー箇所も毎回変わる。)
間のソートも出なかったり2回出たり、そもそもソート自体が上手くいきません。
どこが原因なのでしょうか…
エラーメッセージ list index out of range
該当のソースコード
python
1import random 2def quick(a,left,right): 3 if left<right: 4 i=left+1 5 j=right 6 while 1: 7 while a[i]<a[left] and i<j: 8 i+=1 9 while a[j]>=a[left] and j>left: 10 j-=1 11 if i>=j: 12 break 13 tmp=a[i] 14 a[i]=a[j] 15 a[j]=tmp 16 if left<j and a[left]>a[j]: 17 tmp=a[left] 18 a[left]=a[j] 19 a[j]=tmp 20 print(left,"-",right,"間ソート:",a) 21 quick(a,a[left],a[j-1]) 22 quick(a,a[j+1],a[right]) 23 return 24 25N=10 26a=[0 for i in range(N)] 27for i in range(N): 28 a[i]=random.randint(1,N*2) 29print("初期:",a) 30quick(a,0,N-1) 31print("最終:",a)
試したこと
インデントの調整など
補足情報(FW/ツールのバージョンなど)
インデントが分からないので答えようがありません。
```python
import random
・・・
print("最終:",a)
```
と言う形にして下さい。
プログラムの前は「```python」で、プログラムの後ろは「```」です
動作のたびにエラーの位置が変わるのは初期配列がランダムな値で埋められているからです。エラーが起きる配列に固定すれば、毎回同じ位置でエラーが起きるのでどこで想定外の動作が起きてるか特定しやすくなります。
list index out of rangeの原因は一目瞭然なのですが、教えて良いものかどうかで迷ってしまいます。
AUKさんが、何のためにこのプログラムを作ろうとしているのかによるのです。