面试题答案
一键面试fn bubble_sort(mut numbers: Vec<i32>) -> Vec<i32> {
let len = numbers.len();
for i in 0..len {
for j in 0..len - i - 1 {
if numbers[j] > numbers[j + 1] {
numbers.swap(j, j + 1);
}
}
}
numbers
}
可以这样调用这个函数:
fn main() {
let mut numbers = vec![5, 4, 3, 2, 1];
let sorted_numbers = bubble_sort(numbers);
println!("{:?}", sorted_numbers);
}
在这段代码中:
bubble_sort
函数接收一个Vec<i32>
类型的可变参数numbers
,这体现了所有权的转移,numbers
的所有权被函数接管。- 函数内部通过双重循环进行冒泡排序,在比较和交换元素时,直接对
numbers
进行操作,这是在函数内部对numbers
的借用,而且由于numbers
是可变的,所以这里是可变借用。 - 最后函数返回排序后的
Vec<i32>
,所有权又回到调用者手中。