用rust写一个堆排序
时间: 2023-03-29 21:04:00 浏览: 177
好的,我可以回答这个问题。堆排序是一种基于二叉堆的排序算法,它的时间复杂度为O(nlogn)。下面是用Rust语言实现堆排序的代码示例:
```rust
fn heap_sort(arr: &mut [i32]) {
let len = arr.len();
if len <= 1 {
return;
}
// 构建最大堆
for i in (..len / 2).rev() {
heapify(arr, len, i);
}
// 依次取出最大值并放到数组末尾
for i in (1..len).rev() {
arr.swap(, i);
heapify(arr, i, );
}
}
fn heapify(arr: &mut [i32], len: usize, idx: usize) {
let left = idx * 2 + 1;
let right = idx * 2 + 2;
let mut largest = idx;
if left < len && arr[left] > arr[largest] {
largest = left;
}
if right < len && arr[right] > arr[largest] {
largest = right;
}
if largest != idx {
arr.swap(idx, largest);
heapify(arr, len, largest);
}
}
```
这段代码实现了一个堆排序算法,可以对一个i32类型的数组进行排序。
阅读全文