Go Rust 排序和二分搜索的对比

作者:王东阳

前言

在计算机科学中,排序和二分搜索是非常常见的一种算法,在上篇文章leveldb memdb源码分析(下)之Rust实现篇中,就可以看到里面很多方法都用到了二分搜索来实现。本文将会对比 Go 和 Rust 语言中排序和搜索方法中的一些特性和不同,对于Go主要使用数字切片 []int 作为例子, 对于 Rust 主要使用 Vec 作为例子 。

排序

在Go语言中,对于 []int 我们可以直接使用 sort.Ints 进行排序如下:

func sort_simple() {
   
	a := []int{
   1, 2, 6, 7, 8, 3, 4}
	sort.Ints(a)
	fmt.Println(a)
}

在 Rust 中,对于 Vec 可以使用 sort 方法进行排序如下:

    fn sort_simple() {
   
        let mut a = vec![1, 2, 6, 7, 8, 3, 4];
        a.sort();
        println!("{:?}", a);
    }

如果希望自定义排序规则,在Go中我们可以使用 sort.Slice ,实现逆序排序或基于绝对值等特定规则的排序,如下:

func sort_reverse() {
   
	a := []int{
   1, 2, 6, 7, 8, 3, 4}
	sort.Slice(a, func(i, j int) bool {
   
		return a[i] > a[j]
	})
	fmt.Println(a)
}

func sort_abs() {
   
	a := []int{
   1, -2, 6, 7, -8, 3, 4}
	sort.Slice(a, func(i, j int) bool {
   
		return abs(a[i]) > abs(a[j])
	})
	fmt.Println(a)
}

func abs(i int) int {
   
	if i > 0 {
   
		return i
	}
	return -i
}

在Rust中则可以使用 sort_by来自定义排序

    fn sort_reverse() {
   
        let mut a = vec![1, 2, 6, 7, 8, 3, 4];
        a.sort_by(|a, b| b.cmp(a));
        println!("{:?}", a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值