#sorting #vec #b-tree #order #vector

sorting-vec

使用btreemap对向量进行排序

2个版本

使用旧的Rust 2015

0.1.1 2021年3月27日
0.1.0 2021年3月27日

数据结构分类中排名第1864

MIT授权许可

8KB
120

sorting-vec

一个简单的crate,使用BTreeMap对向量进行排序。它使得删除重复项变得容易,而且与归并排序等算法相比没有真正的性能优势,但它很有趣,实现起来也很有趣。这个crate包含一个名为BTreeSort的trait,其中包含以下函数

  • uniques -> Vec<T> - 返回升序排序的唯一值。
  • sorted -> Vec<T> - 返回升序排序的值。
  • reverse_uniques -> Vec<T> - 返回降序排序的唯一值。
  • reverse_sort -> Vec<T> - 返回降序排序的值。

以及提供支持这种排序的中间结构的函数 btree_sort

使用函数 btree_sort 和 trait BTreeSort

use sorting_vec::{btree_sort, BTreeSort};

#[test]
fn integers() {
    let vec = vec![7, 3, 4,5, 6,8,3,2, -4, 5, 7,8, 0,9];
    let sort = btree_sort(vec);

    assert_eq!(sort.clone().uniques(), vec![-4, 0, 2, 3, 4, 5, 6, 7, 8, 9]);
    assert_eq!(sort.sorted(), vec![-4, 0, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9]);
}

#[test]
fn usize() {
    let vec: Vec<usize> = vec![7, 3, 4,5, 6,8,3,2, 5, 7,8, 0,9];
    let sort = btree_sort(vec);

    assert_eq!(sort.clone().uniques(), vec![0, 2, 3, 4, 5, 6, 7, 8, 9]);
    assert_eq!(sort.clone().sorted(), vec![0, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9]);
    assert_eq!(sort.reverse_uniques(), vec![9, 8, 7, 6, 5, 4, 3, 2, 0]);
}

#[test]
fn chars() {
    let vec = vec!['h', 'g', 'p', 'a', 'c', 'g'];
    let sort = btree_sort(vec);

    assert_eq!(sort.clone().uniques(), vec!['a', 'c', 'g', 'h', 'p']);
    assert_eq!(sort.clone().sorted(), vec!['a', 'c', 'g', 'g', 'h', 'p']);
    assert_eq!(sort.reverse_sort(), vec!['p', 'h', 'g', 'g', 'c', 'a']);
}

#[test]
fn string() {
    let vec = vec!["ha", "he", "ga", "12", "pow", "he", "543", "as", "cd", "ga"];
    let sort = btree_sort(vec);

    assert_eq!(sort.clone().uniques(), vec!["12", "543", "as", "cd", "ga", "ha", "he", "pow"]);
    assert_eq!(sort.sorted(), vec!["12", "543", "as", "cd", "ga", "ga", "ha", "he", "he", "pow"]);
}

使用 trait BTreeSort

use sorting_vec::{BTreeSort};

#[test]
fn vec_usize() {
    let vec: Vec<usize> = vec![7, 3, 4, 5, 6, 8, 3, 2, 5, 7, 8, 0, 9];

    assert_eq!(vec.clone().uniques(), vec![0, 2, 3, 4, 5, 6, 7, 8, 9]);
    assert_eq!(
        vec.clone().sorted(),
        vec![0, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9]
    );
    assert_eq!(vec.reverse_uniques(), vec![9, 8, 7, 6, 5, 4, 3, 2, 0]);
}

无运行时依赖