#排序 #快速 #归并 #插入 #二分搜索

rs_algo

常见排序算法和其他常见计算机科学算法

10 个版本

0.2.1 2020 年 11 月 19 日
0.2.0 2020 年 10 月 4 日
0.1.7 2018 年 9 月 18 日
0.1.5 2018 年 8 月 30 日

算法 类别中排名 581

每月 21 次下载

MIT 许可证

32KB
744

Algo

一个用于任何实现 PartialOrd 和 Copy 通用类型的常用排序算法的小型包。该包可以在以下位置找到:

排序

  • 归并排序
  • 快速排序
  • 插入排序
  • 冒泡排序

比较

  • 找到两个字符串的最长公共子序列
  • 找到两个字符串的最长公共子串
  • 通过二分搜索找到值或其索引

数学

  • 最大公约数(欧几里得算法)
  • 找到一个数的因子
  • 检查两个数是否互质

用法

[dependencies]
rs_algo = "^0.2"

示例

use rs_algo::math;
use rs_algo::sort::*;
use rs_algo::search::binary;
use rs_algo::compare::{LCSubsequence, LCSubstring};


fn main() {
  let mut a = vec![117, 1, 3, 99, 10, 7, 17, 2, 11, -6, 4, 9, 10, 7, 2, 11, -5, 4, 9, 7, 2, 11, -5, 4, 9, 8];
  let mut b = vec![117, 1, 3, 99, 10, 7, 17, 2, 11, -6, 4, 9, 10, 7, 2, 11, -5, 4, 9, 7, 2, 11, -5, 4, 9, 8];
  let mut c = vec![117, 1, 3, 99, 10, 7, 17, 2, 11, -6, 4, 9, 10, 7, 2, 11, -5, 4, 9, 7, 2, 11, -5, 4, 9, 8];
  let mut d = vec![117, 1, 3, 99, 10, 7, 17, 2, 11, -6, 4, 9, 10, 7, 2, 11, -5, 4, 9, 7, 2, 11, -5, 4, 9, 8];

  // Get a sorted array without changing the original
  let sorted_bubble = bubble::sort(&a);
  let sorted_insertion = insertion::sort(&b);
  let sorted_merge = merge::sort(&c);
  let sorted_quick = quick::sort(&d);

  // This will sort the vector passed in, changing the original vector order
  merge::sort_mut(&mut a);
  quick::sort_mut(&mut b);
  insertion::sort_mut(&mut c);
  bubble::sort_mut(&mut d);

  // get a new longest common sequence object
  let sequence = LCSubsequence::new_subsequence("leighxxxft".to_string(), "right".to_string());
  assert_eq!(sequence.subsequence_len, 4);
  assert_eq!(sequence.get_longest_subsequence(), Some("ight".to_string()));

  // get a new longest common substring
  let substring = LCSubstring::new_substring("!!!!Hello WorldXXXXX".to_string(), "XX Hello World@cvcvcvc".to_string());
  assert_eq!(substring.substring_len, 11);
  assert_eq!(substring.get_longest_substring(), Some("Hello World".to_string()));

  // do a binary search on array 'a' to see if value 99 is in the array
  match binary::search(99, &a) {
    Some(value) => println!("our array has value {}", value),
    None => println!("our array dosen't have value 99"),
  }

  // do a binary search on array 'a' to get the index. Note: with binary search, this may not be the first occurance
  match binary::index_of(99, &a) {
    Some(index) => println!("index of 99 is {}", index),
    None => println!("no index of 99, guess it's not in there"),
  }

  // common math functions
  let divisor = math::gcd(30, 21);
  let factor = math::factors(9124);

  assert_eq!(Ok(3), divisor);
  assert_eq!(Some(vec![2, 4, 2281, 4562]), factor);
}

许可证

MIT 许可证 版权 (c) <2018-2020> Joe Berria

无运行时依赖