バブルソートのプログラム
RUST の(自分のための)チュートリアル的な観点から基本的な記法の説明も書く。
すごく基本的ですごくダメなアルゴリズムなのでバブルソートの説明はないです。
fn main() {
let mut array = [3, 2, 10, 5, 8];
bubble_sort(&mut array);
println!("ans = {:?}",array);
}
fn bubble_sort<T: Ord>(arr: &mut [T]){
for i in 0 .. arr.len(){
for j in 1 .. arr.len() - i {
if arr[j] < arr[j-1]{
arr.swap(j, j-1);
}
}
}
}
bubble_sort<T: Ord>
ここで、<T>
は、ジェネリックなデータ型(Generic Data Type)を表している。
だけど、これだけでは比較演算子 “<” が使えない。
そこで、<T: Ord>
と書いて、任意の要素を2つ選んだときに、それが比較可能であることを明示してやっている。
arr.swap(j, j-1);
swap 関数は、Rust の標準ライブラリに用意されていて特別な宣言無しで使用可能。
自分でも書いてみようかなと思ったけど、unstable とかを使わないとうまく書けないみたい(難しい)。
こいつ自身も unstable。
bubble_sort(&mut array);
可変な参照は &mut
をつける。そうしてやることによって所有権を借用して、値の書き換えを行うことができる。
当然、変数を書き換えてもらわなきゃいけないので、配列 array も可変にしなければいけない。
println!("ans = {:?}",array);
変数の中身を出力するときは {}
じゃないの?
配列の中身を出力したいときは {:?} を使おう。