Я хотел бы создать на месте функцию heapsort в Rust. В стандартной библиотеке я нашел std::collections::BinaryHeap
, который выглядел многообещающим. Я могу использовать его, чтобы создать функцию потребляя свой аргумент:На месте heapsort с использованием 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'. Я просто хотел реализовать heapsort (не обязательно из квадратного), и когда я нашел «BinaryHeap», я подумал, что попробую. Я был удивлен, что я не смог заставить его работать, даже если документы указывают, что «преобразование вектора в двоичную кучу можно сделать на месте». Я хоть что-то упустил. – ljedrz
@ljedrz: «in-place» в этом контексте относится к буфере для элементов 'Vec'. «BinaryHeap» просто берет на себя «Vec» и модифицирует его, чтобы иметь структуру кучи. – sellibitze
Thanks @sellibitze; Я предполагал, что я мог бы сделать это прямо на изменчивой ссылке. – ljedrz