挿入ソートも n * (n – 1) / 2 の計算量になる。
対象データを一時領域に確保しておき、値が大きかどうかを判定して、大きい場合は入れ替えるという作業を繰り返す。
usizeは-にならないため、 j== 0の時は判定しています。
fn main() {
let mut data = [6, 15, 4, 2, 8, 5, 11, 9, 7, 13];
for i in 1..data.len() {
let temp = data[i];
let mut j = i - 1;
while (j >= 0) && (data[j] > temp) {
data[j + 1] = data[j];
if j == 0 {
break;
}
j -= 1;
}
if j == 0 && (data[j] > temp) {
data[0] = temp;
} else {
data[j + 1] = temp;
}
println!("sorted data:{:?}", data);
}
println!("sorted data:{:?}", data);
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.52s
Running `target/debug/rust`
sorted data:[6, 15, 4, 2, 8, 5, 11, 9, 7, 13]
sorted data:[4, 6, 15, 2, 8, 5, 11, 9, 7, 13]
sorted data:[2, 4, 6, 15, 8, 5, 11, 9, 7, 13]
sorted data:[2, 4, 6, 8, 15, 5, 11, 9, 7, 13]
sorted data:[2, 4, 5, 6, 8, 15, 11, 9, 7, 13]
sorted data:[2, 4, 5, 6, 8, 11, 15, 9, 7, 13]
sorted data:[2, 4, 5, 6, 8, 9, 11, 15, 7, 13]
sorted data:[2, 4, 5, 6, 7, 8, 9, 11, 15, 13]
sorted data:[2, 4, 5, 6, 7, 8, 9, 11, 13, 15]
sorted data:[2, 4, 5, 6, 7, 8, 9, 11, 13, 15]
途中経過を見ると美しいが、これも計算量が多くなる模様。





