Я новичок в ржавчине и пытаюсь запачкать руки, поэтому я пытаюсь реализовать быструю сортировку как часть одного из упражнений «Книги» (вероятно, автор не собирался предлагать пойдите так глубоко, но разве это не лучший способ учиться? :))

Это то, что я до сих пор:

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». Я менял его раньше, так что это не причина ошибки, но я хотел бы посмотреть, будет ли это работать таким образом, поэтому я оставил это так.

0
zoldseges 9 Фев 2021 в 19:12

1 ответ

Лучший ответ

Ваш fn partition(v: &mut Vec<i32>, lo: i32, hi: i32) ничего не возвращает (обозначено в Rust как имеющее возвращаемый тип ()), поэтому вы не можете присвоить результат переменной типа i32.

3
HHK 9 Фев 2021 в 16:18