go语言-排序的使用

本文介绍常用类型的排序方法

主要内容

1. 字符串切片、整型切片与浮点型切片的排序

2. 逆序排序

3. 自定义类型的排序

4. 对已排序的切片使用sort.search()进行查找指定元素

字符串切片排序与逆序

	// 定义一个字符串切片
	strSlice := []string{"golang", "python", "C++", "C", "java", "typescript", "javascript"}
	// 方法一:使用sort包的Strings()函数对字符串切片进行排序
	sort.Strings(strSlice)
	fmt.Printf("排序后: %v\n", strSlice)

	// 方法二:使用sort.StringSlice类型,将原字符串切片放入sort.StringSlice类型切片中,再用sort.Sort()进行排序
	sss := sort.StringSlice{}
	for _, v := range strSlice {
		sss = append(sss, v)
	}
	sort.Sort(sss)
	fmt.Printf("排序后: %v\n", sss)

	// 对字符串逆序
	sort.Sort(sort.Reverse(sss))
	fmt.Printf("逆序排序后: %v\n", sss)

整型和浮点型切片排序

	// 定义一个整型切片
	intSlice := []int{2, 8, 4, 6, 3}

	// 使用sort.Ints()函数,直接对整型切片排序
	sort.Ints(intSlice)
	fmt.Printf("排序后: %v\n", intSlice)

	// 定义一个浮点数切片
	floatSlice := []float64{2.1, 8.1, 5.1, 4.1, 3.1}

	// 使用sort.Float64s()函数,直接对浮点数切片排序
	sort.Float64s(floatSlice)
	fmt.Printf("排序后: %v\n", floatSlice)

自定义类型的排序

// 定义一个student类型
type student struct {
	name  string
	age   int
	score int
}

// 定义一个切片类型
type studentGroupt []student


// 为了使用sort.Sort()接口对自定义类型进行排序,需要实现下面三方方法
func (s studentGroupt) Len() int { return len(s) }

func (s studentGroupt) Less(i, j int) bool {
	// 按分数排序从低到高排序
	return s[i].score < s[j].score

}

func (s studentGroupt) Swap(i, j int) { s[i], s[j] = s[j], s[i] }


func main(){

    sg := studentGroupt{student{
		name:  "xianwei",
		age:   39,
		score: 80,
	}, student{
		name:  "qiuyue",
		age:   36,
		score: 70,
	}, student{
		name:  "xianjun",
		age:   27,
		score: 100,
	}, student{
		name:  "xianjun2",
		age:   27,
		score: 98,
	}}

	sort.Sort(sg)
	fmt.Printf("排序后: %v\n", sg)
}

使用sort.search()进行查找

Search 常用于在一个已排序的,可索引的数据结构中寻找索引为 i 的值 x,例如数组或切片。这种情况下,实参 f,一般是一个闭包,会捕获所要搜索的值,以及索引并排序该数据结构的方式。

为了查找某个值,而不是某一范围的值时,如果slice以升序排序,则 f func中应该使用>=,如果slice以降序排序,则应该使用<=.

// 整型切片使用sort.Serarch()查找指定元素
    si := sort.IntSlice{2, 8, 4, 6, 3}

	sort.Sort(si)
	fmt.Printf("排序后:%v\n", si)

	target := 5
	index := sort.Search(len(si), func(i int) bool {
        // 找到后退出
		return si[i] >= target
	})

	if index < len(si) && target == si[index] {
		fmt.Println("found, index is ", index)
	} else {
		fmt.Println("not found")
	}



// 自定义类型切片使用sort.Serarch()查找指定元素

    sort.Sort(sg)
	fmt.Printf("排序后: %v\n", sg)

	target2 := student{
		name:  "qiuyue",
		age:   36,
		score: 70,
	}
	// 对自定义类型,按其余某个可比较的年龄字段来查找
	index2 := sort.Search(len(sg), func(i int) bool {
		return sg[i].age >= target2.age
	})
	if index2 < len(si) && target2.age == sg[index2].age {
		fmt.Println("found, index is ", index2)
	} else {
		fmt.Println("not found")
	}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Go语言写一个冒泡排序算法的代码如下所示:package mainimport "fmt"func bubbleSort(arr []int) { n := len(arr) for i := 0; i < n; i++ { for j := 0; j < n-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } }func main() { arr := []int{2, 3, 1, 4, 5} fmt.Println("Before sorting:", arr) bubbleSort(arr) fmt.Println("After sorting:", arr) } ### 回答2: 冒泡排序是一种简单的排序算法,可以使用Go语言来实现。下面是用Go语言写的冒泡排序算法: ```go package main import "fmt" func bubbleSort(arr []int) { n := len(arr) for i := 0; i < n-1; i++ { for j := 0; j < n-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } } func main() { arr := []int{6, 2, 4, 1, 5, 3} fmt.Println("排序前:", arr) bubbleSort(arr) fmt.Println("排序后:", arr) } ``` 在这段代码中,我们定义了一个名为`bubbleSort`的函数来实现冒泡排序。该函数接受一个整数数组作为输入,并对数组中的元素进行排序排序过程利用了两个嵌套的循环。外层循环从数组的第一个元素到倒数第二个元素进行迭代,内层循环从第一个元素开始与其相邻的元素进行比较,如果前一个元素大于后一个元素,则交换它们的位置。通过多次迭代,数组中的最大元素会逐渐移到末尾,最终实现了冒泡排序。 在`main`函数中,我们定义了一个整数数组并赋予初始值,然后调用`bubbleSort`函数来对数组进行排序。最后我们打印排序前和排序后的数组,以验证算法的正确性。 以上代码是一个简单的冒泡排序的实现,能够对给定的整数数组进行排序。当然,这只是冒泡排序的一种实现方式,也可以根据具体的需求进行优化或改进。 ### 回答3: 冒泡排序是一种简单的排序算法,它通过多次遍历列表,比较相邻的元素并交换它们的位置,使得较大的元素逐渐“冒泡”到列表的末尾,较小的元素逐渐“浮”到列表的前端,从而实现排序。 下面是使用Go语言编写的冒泡排序算法: ```Go package main import "fmt" func bubbleSort(arr []int) { n := len(arr) for i := 0; i < n-1; i++ { for j := 0; j < n-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } } func main() { arr := []int{64, 34, 25, 12, 22, 11, 90} bubbleSort(arr) fmt.Println("排序后的数组:", arr) } ``` 在上述代码中,我们首先定义了一个`bubbleSort`函数,它接受一个整数切片作为参数。算法的主要逻辑实现在两个嵌套的for循环中,通过比较相邻元素的大小并进行交换,将较大的元素向右移动。 然后,在`main`函数中,我们定义了一个整数切片`arr`,并调用`bubbleSort`函数对其进行排序。最后,我们打印排序后的数组。 当我们运行上述代码时,输出结果为:[11 12 22 25 34 64 90],即已经成功将切片`arr`中的元素按从小到大的顺序进行排序。 这就是使用Go语言编写冒泡排序算法的方法。冒泡排序算法虽然简单,但对于小规模的数据排序仍然是一种有效的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值