手違いで挿入ソートを一部間違えて記述してしまいました。
そこで得られた結果を検証することにしたのですが、自分がたどった時の結果と違っていました。何故でしょうか ご教授願います。
swift
1//insert sort 2//insert sort 3var a = [10,3,1,4,2] 4//開始位置を一つずつ後ろへずらす 5for i in 1...a.count-1 { 6 var temp = a[i] 7 //a[i]の入る位置を後ろから調べていく。ここでtoを本来の−1ではなく一個手前の0にしました。 8 for j in stride(from:i-1, to:0, by:-1){ 9 if (temp < a[j]){ 10 a[j+1] = a[j] 11 } else { 12 a[j+1] = temp 13 } 14 } 15 //もしa[i]が先頭に位置していた場合、a[i]を先頭につけます。 16 if (a[0] >= temp){ 17 a[0] = temp 18 } 19} 20print("挿入ソート=",a) 21
出力結果:挿入ソート= [1, 3, 3, 4, 4]
私は以下のようになると頭の中で考えました。forループでiを1からじゅんに増やして言った時、
i=1 3,3,1,4,2
i=2 1,3,3,4,2
i=3 1,3,3,4,2 ←問題はここらしいです。3<4だからelseに行ってa[3]=4となって何も変わらないと思ったのですが違うようです。
i=4 1,3,3,3,4
しかし、プログラムをいじった結果、i=3の段階で異なっていました。
i=3 1,3,4,4,2
が正しい値でした。(iの末尾をa.count-2に変更しました。)
なぜそうなるのかがわかりません。
初歩的な質問ですが、よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー