質問: 0 ; i < a.length ; i++) { System.out.println("[" + i + "]:" + a[i]) ; } } } ### 試したこと partitionメソッド内の a[i].compareTo(privot)、privot.compareTo(a[j])と i++、j--などの処理を行う位置を変更したり、処理内容を変更してみたのですが、いずれも処理は終わらず、正しい実行結果を得ることはできませんでした。 ### 補足情報(FW/ツールのバージョンなど)
回答: ``` while (true) { //ポインタiを右に進める int check = a[++i].compareTo(privot); while (check < 0) i++; check = a[i].compareTo(privot); //ポインタjを左に進める int check2 = privot.compareTo(a[j]); while (i < --j && check2 < 0) j--; check2 = privot.compareTo(a[j]); //ポインタiとjがぶつかったらループを抜ける if (i >= j) break; //iのさす要素とjのさす要素を交換する String temp = a[i]; a[i] = a[j]; a[j] = temp; } ``` partitionメソッド内のwhileループを抜き出し、インデントを入れました。原因は「ポインタiを右にずらす」のところにあるwhileループです。 whileに中括弧がないため、ループして実行する対象の文は`i++`のみです。whileの継続条件に関わるcheckは一切変化しないため、一度入ったら抜け出せなくなります。なお、この後にあるjをずらす処理も同様に、無限ループの書き方になっています。