Bubble Sort in Rust


バブルソートのプログラム
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);

変数の中身を出力するときは {} じゃないの?
配列の中身を出力したいときは {:?} を使おう。