【发布时间】:2017-06-17 03:15:00
【问题描述】:
当尝试在 Rust 1.15 中运行如下所示的插入排序算法时。
fn main() {
println!("The sorted set is now: {:?}", insertion_sort(vec![5,2,4,6,1,3]));
}
fn insertion_sort(set: Vec<i32>) -> Vec<i32> {
let mut A = set.to_vec();
for j in 1..set.len() {
let key = A[j];
let mut i = j - 1;
while (i >= 0) && (A[i] > key) {
A[i + 1] = A[i];
i = i - 1;
}
A[i + 1] = key;
}
A
}
我得到错误:
thread 'main' panicked at 'attempt to subtract with overflow', insertion_sort.rs:12
note: Run with `RUST_BACKTRACE=1` for a backtrace
为什么这里会发生溢出,问题是如何缓解的?
【问题讨论】:
-
@SpencerWieczorek 但相同的代码似乎在 python 中运行,具有相同的输入
-
i的类型为usize,即它是无符号的,因此条件i >= 0始终为真。此外,Rust 没有 python 允许负索引的特性。 -
你为什么不用
slide::sort?