#二分查找 #算法 #实用工具 #搜索算法 #重复项

bsutils

高效二分查找实用工具

3 个版本

0.1.2 2021年11月13日
0.1.1 2021年11月13日
0.1.0 2021年11月13日

#1781算法

MIT 许可证

6KB
79

功能说明

如果你的有序数组/vec 有重复项,二分查找将从数组的任意位置选择所需项。这个包提供了一些实用函数,可以帮助你找到该项第一次或最后一次出现的位置。

例如,查看这个有序数组示例

let arr = [1, 3, 4, 6, 6, 6, 6, 8, 12]

如果我们查找项目 6,简单的二分查找将返回一个范围为3到6的索引。如果你需要精确地知道6第一次/最后一次(或两者)出现的位置,这个包将对你有所帮助。

特性

  1. 支持多种类型。
  2. 代码简洁易懂。
  3. 时间复杂度:O(logn),空间复杂度:O(1)

版本说明:在 README.md 中澄清描述

使用方法

这个包导出3个函数,分别是

find_first_idx找到项第一次出现的位置的索引。

find_last_idx找到项最后一次出现的位置的索引。

first_last_idx找到项第一次和最后一次出现的位置的索引。返回一个元组。

所有这3个函数都期望一个指向有序数组/Vector的引用,以及你正在查找的项。

快速入门

查找第一个索引

use bsutils::interface::find_first_idx;

fn main() {
	let list = [1, 1, 4, 6, 7, 7, 7, 7, 9, 9, 11];
	let given = 7; // the item we look for
	let first_idx = find_first_idx(&list, given);
	println!("{}", first_idx);

	// Output: 4
}

查找最后一个索引

use bsutils::interface::find_last_idx;

fn main() {
	let list = [1, 1, 4, 6, 7, 7, 7, 7, 9, 9, 11];
	let given = 7; // the item we look for
	let last_idx = find_last_idx(&list, given);
	println!("{}", last_idx);

	// Output: 7
}

查找第一个和最后一个索引

use bsutils::interface::first_last_idxs;

fn main() {
	let list = [1, 1, 4, 6, 7, 7, 7, 7, 9, 9, 11];
	let given = 7; // the item we look for
	let both_idxs = first_last_idxs(&list, given);
	println!("{}", both_idxs);

	// Output: (4, 7)
}

无运行时依赖