atCoderでランクAくらいの問題レベル(超初心者)のSWAP系だと思いますが、苦戦しまくったので今後のために、考え方をメモっておきます.
ちょっとまだ模範解答を見ていない状態です、とりあえず自身で導き出した答えをメモっておきたい感じ。笑
前提
- aryに5つ数字が入る場合を想定(厳密にいうと何個来ても対応できるように考えた、実際、この考えは不要かもしれない)
- max/min関数など便利なライブラリ関数も知っていない状態
考え方
- 最小値をaryの先端と仮定する
- ary内の全値と比較して本当の最小値を見つける
- 最小値とaryの最後尾にもっていく
- その際にaryの最後尾にあった値と入れ替える
- aryの幅をひとつずつ減らしていく
- 1-3の繰り返し
サンプルコード
いまから模範解答みます。自作コードはパッと見て理解しにくいです。
最終的にswapするところはもうtmp値でもないし...
public static int[] sortIntegers(int[] array) { int tmpMinValue = array[0]; int tmpMinPosition = 0; int loopCnt = array.length; while(loopCnt != 0) { for (int i = 0; i < loopCnt; i++) { if (tmpMinValue > array[i]) { tmpMinValue = array[i]; tmpMinPosition = i; } } array[tmpMinPosition] = array[loopCnt-1]; array[loopCnt-1] = tmpMinValue; tmpMinValue = array[0]; tmpMinPosition = 0; loopCnt -= 1; } return array; }