rust - 预期类型与收到的类型不匹配

标签 rust quicksort

我是第一次接触 rust ,我正努力弄脏手,所以我正在尝试实现快速排序,作为“The Book”练习之一的一部分(可能作者不打算建议这样做)。虽然走得更深,但这不是学习的最佳方法吗?:))
这是我到目前为止所拥有的:

fn quicksort(v: &mut Vec<i32>) {
    // helper funtions for sorting the partitional vectors
    
    fn partition(v: &mut Vec<i32>, lo: i32, hi: i32) {
    // pivot
    let mut p: i32;
    let mut i = lo;

    for j in i..hi {
    }
    }
    
    fn quicksort(v: &mut Vec<i32>, lo: i32, hi: i32) {
    // pivot
    let mut p: i32;
    if lo < hi {
        p = partition(v, lo, hi);
    }
    }


    quicksort(v, 0, (v.len() -1).try_into().unwrap())
}
当我尝试编译时,我得到以下信息:
[foo12@archT520 vectors]$ cargo run
   Compiling vectors v0.1.0 (/home/foo12/programs/rust/book/vectors)
error[E0308]: mismatched types
  --> src/main.rs:36:10
   |
36 |         p = partition(v, lo, hi);
   |             ^^^^^^^^^^^^^^^^^^^^ expected `i32`, found `()`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
error: could not compile `vectors`

To learn more, run the command again with --verbose.
我看不到我搞砸了。

另外,我很高兴获得不使用其他库的quicksort的完整实现。也许我可以从中学到东西。

编辑:我也不确定函数名称为“quicksort”的这种“shadowing”方式是否会起作用。我之前曾对其进行过更改,所以这不是导致错误的原因,但是我想看看它是否会以这种方式工作,这就是为什么我这样保留它。

最佳答案

您的fn partition(v: &mut Vec<i32>, lo: i32, hi: i32)不返回任何内容(在Rust中表示为具有返回类型()),因此您不能将结果分配给i32类型的变量。

关于rust - 预期类型与收到的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66122743/

相关文章:

c - 使用快速排序获取数组的排序索引

使用foldr在SML中快速排序

rust - 当我没有在每次呈现屏幕时都调用 `graphics::clear` 时,如何阻止 Piston 使屏幕闪烁?

Rust 声明先分配后模式

rust - 处理 stdin 上的 UTF-8 输入

rust - 具有多个生命周期的迭代器

rust - 使用对比较运算符或函数的引用来比较某些值

python - QuickSort 对于低范围数据工作缓慢

haskell - Haskell 中的快速排序错误

javascript - 使用 Javascript 进行快速排序的大 O 问题