質問: new int[] {8,5,11,2,15,24,1,19}; System.out.printf("ソート前: %s\n", Arrays.toString(a)); array.sort(a); System.out.printf("ソート後: %s\n", Arrays.toString(a)); } } ```
回答: 問題なのはこの行ですね。 ``` int[] b = new int[] {x,i,j}; ``` ここで`x`は配列の要素の値であるのに対し、`i`と`j`はインデックスですから、まったく異質のものを比較していることになります。 で、配列のソート範囲以外の値が境界値として選ばれてしまうと、コードが暗黙のうちに前提としていることが壊れて、記載されたような事象が起こります。 さっきの行はこうでしょうね。 ``` int[] b = new int[] {x,a[i],a[j]}; ``` 配列`b`に入れるのは、配列中の要素からピックアップしたものでないといけません。 本題とは直接関係はありませんが、 ``` swap(a, i++, j--); ``` のように副作用のある式を実引数に使うくせは改めた方が良いでしょうね。将来もっと複雑なコードを扱うようになった時に、評価順序の問題で見つけにくいバグを引き起こすことがあります。(他にもいろいろあるんですが、本題と離れすぎるんでこの辺で。)