How to sort a vector in Rust?

当前推荐的排序向量值的方法是什么?

58413 次浏览

具有总排序的可变元素片具有 sort方法。

因为 Vec<T>实现了 DerefMut<[T]>,所以可以直接在向量上调用这个方法,所以 vector.sort()可以工作。

虽然上面提出的解决方案可以对整数的向量进行排序,但是我在对浮点数的向量进行排序时遇到了问题。

最简单的解决方案是使用 快速排序板条箱,它也可以对浮点数进行排序。 快速排序板条箱还可以对任何类型的其他向量进行排序,并实现使用比较(sort _ by)进行排序的方法。

以下是 Rust 代码:

extern crate quickersort;
//let's create the vector with the values
let mut vals = Vec::new();
vals.push(31.2);
vals.push(31.2);
vals.push(10.0);
vals.push(100.4);
vals.push(4.1);
quickersort::sort_floats(&mut vals[..]); // sort the vector

要对矢量 v进行排序,需要的是 在大多数情况下 v.sort()

如果你想应用一个 习俗排序规则,你可以通过 v.sort_by()做到这一点。其中包括希望对以下值进行排序的情况:

  • 不实现 Ord(如 f64、大多数结构等) ;
  • 确实实现了 Ord,但是您希望应用一个特定的非标准排序规则。

还要注意的是,sort()sort_by()使用的是 稳定排序算法(即,相等的元素不会被重新排序)。如果不需要稳定的排序,可以使用 sort_unstable()/sort_unstable_by(),因为它们通常更快一些,并且使用更少的内存。