1件ずつ調べていく手法です。最小値の抽出は以下の通り。
fn main() { let data = [6, 15, 4, 2, 8, 5, 11, 9, 7, 13]; let mut min = 0; for i in 0..data.len() { if data[min] > data[i] { min = i; } } println!("minimal num:{}", data[min]); }
### 選択ソート
n * (n – 1) / 2 の計算量が必要になる。もっとも小さいものを左から順番に並べていく。
mem::swap(&mut data[min], &mut data[i]);は使えない。
use std::mem; fn main() { let mut data = [6, 15, 4, 2, 8, 5, 11, 9, 7, 13]; for i in 0..data.len() { let mut min = i; let k = i + 1; for j in k..data.len() { if data[min] > data[j] { min = j; } } // mem::swap(&mut data[min], &mut data[i]); data.swap(i, min); } println!("sorted data:{:?}", data); }
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.44s
Running `target/debug/rust`
sorted data:[2, 4, 5, 6, 7, 8, 9, 11, 13, 15]
なるほど、普段ソートとか考えたことなかったが、こうなってるのか。。面白いね。