Rustでインプレース・ヒープソート関数を作成したいと考えています。標準ライブラリでは、私はstd::collections::BinaryHeap
が有望であると判断しました。私は、その引数を消費する関数を作成するためにそれを使用することができる午前:std :: collections :: BinaryHeapを使用したインプレース・ヒープソート
use std::collections::BinaryHeap;
fn heapsort<T: Ord>(list: Vec<T>) -> Vec<T> {
let heap = BinaryHeap::from(list);
heap.into_sorted_vec()
}
ドキュメントは、「バイナリヒープにベクトルを変換するにはその場で行うことができます」が、私は、トラブル動作するものを作るが生じていますと述べていますインプレースで行うことができます(heapsort<T: Ord>(list: &mut Vec<T>)
)。 std::collections::BinaryHeap
のみを使用して達成できますか?
私は 'slice :: sort'について知っています。私はヒープソートを実装したがっている(必ずしも正方形ではない)、 'BinaryHeap'を見つけたときに私はそれを試してみると思った。私はドキュメントが "バイナリヒープにベクトルをインプレースで実行できる"と述べていても、動作させることができないことに驚いていました。私は何かが欠けていましたが。 – ljedrz
@ljedrz:この文脈での「インプレース」は、「Vec」の要素のバッファを指します。 'BinaryHeap'は' Vec'の所有権を持ち、それをヒープ構造に変更します。 – sellibitze
ありがとう@sellibitze;インプレースでは私は変更可能な参照で直接行うことができますが、 – ljedrz