如何在Rust中对矢量进行排序?

时间:2014-11-10 03:54:57

标签: rust

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

3 个答案:

答案 0 :(得分:69)

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

由于Vec<T>实现了DerefMut<[T]>,您可以直接在向量上调用此方法,因此vector.sort()可以正常工作。

答案 1 :(得分:0)

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

最简单的解决方案是使用quickersort crate,它也可以对浮点数进行排序。 quickersort crate还可以对任何类型的其他向量进行排序,并且还实现了使用比较进行排序的方法(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

答案 2 :(得分:0)

要对向量 v 进行排序,在大多数情况下 v.sort() 将是您所需要的。

如果您想应用自定义排序规则,您可以通过 v.sort_by() 来实现。这包括您想要对以下值进行排序的情况:

  • 不要实现Ord(例如f64、大多数结构体等);
  • 确实实现了 Ord,但您想应用特定的非标准排序规则。

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