我想在Rust中創建一個就地heapsort函數。在標準庫中,我發現std::collections::BinaryHeap
看起來很有希望。我可以用它來創建一個功能消耗它的參數:使用std :: collections :: BinaryHeap就地heapsort
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'。我只是想實現一個heapsort(不一定是從一個方塊),當我發現'BinaryHeap'時,我想我會試試看。我很驚訝,即使文檔聲明「將矢量轉換爲二進制堆可以在原地完成」,我仍然無法完成工作。我雖然失去了一些東西。 – ljedrz
@ljedrz:這裏的「in-place」是指Vec元素的緩衝區。 'BinaryHeap'只是取得了'Vec'的所有權,並將其修改爲具有堆結構。 – sellibitze
謝謝@sellibitze;我雖然在原地暗示我可以直接做一個可變的參考。 – ljedrz