MST

星途 面试题库

面试题:Rust闭包在排序算法中的简单应用

请使用Rust编写一个简单的排序算法(如冒泡排序),并在其中运用闭包来定义比较逻辑。解释闭包在这里是如何增强代码的灵活性和可复用性的。
42.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Rust 冒泡排序实现

fn bubble_sort<T, F>(arr: &mut [T], compare: F)
where
    T: Ord,
    F: Fn(&T, &T) -> bool,
{
    let len = arr.len();
    for i in 0..len {
        for j in 0..len - i - 1 {
            if (compare)(&arr[j], &arr[j + 1]) {
                arr.swap(j, j + 1);
            }
        }
    }
}

闭包增强灵活性和可复用性的解释

  1. 灵活性:通过将比较逻辑作为闭包传入 bubble_sort 函数,我们可以轻松改变排序的标准。例如,如果我们有一个结构体数组,我们可以定义不同的闭包来根据结构体的不同字段进行排序。这意味着同一个 bubble_sort 函数可以用于多种数据类型和不同的比较需求,而无需为每种情况都重写排序逻辑。
  2. 可复用性:闭包使得 bubble_sort 函数更通用。无论我们是要升序排序(比较逻辑为 a > b)还是降序排序(比较逻辑为 a < b),都可以通过传入不同的闭包来实现。这提高了 bubble_sort 函数的复用性,它不再局限于单一的比较规则,而是可以适应各种比较场景。

示例使用

fn main() {
    let mut numbers = vec![3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
    bubble_sort(&mut numbers, |a, b| a > b);
    println!("{:?}", numbers);

    let mut strings = vec!["banana", "apple", "cherry"];
    bubble_sort(&mut strings, |a, b| a.len() > b.len());
    println!("{:?}", strings);
}

在上述示例中,我们对 numbers 数组进行降序排序,对 strings 数组按字符串长度降序排序,展示了闭包在增强灵活性和可复用性方面的作用。