美文网首页
Go语言 排序与搜索切片

Go语言 排序与搜索切片

作者: 小杰的快乐时光 | 来源:发表于2018-08-18 22:57 被阅读0次

Go语言标准库中提供了sort包对整型,浮点型,字符串型切片进行排序,检查一个切片是否排好序,使用二分法搜索函数在一个有序切片中搜索一个元素等功能。

关于sort包内的函数说明与使用,请查看https://godoc.org/sort

在这里简单讲几个sort包中常用的函数

sort.Float64s(s)                        // 将[]float64按升序排列
sort.Float64AreSorted(s)         // 如果[]float64是有序的就返回true
sort.Ints(s)                               // 将[]int按升序排列
sort.IntsAreSorted(s)              // 如果[]int是有序的就返回true
sort.Strings(s)                         // 将[]string按升序排列
sort.StringsAreSorted(s)        // 如果[]string是有序的就返回true
sort.IsSorted(s)                      //如果sort.interface 的值s是有序的,则返回true
sort.Search(size,fn)                //在一个排序好的数组中根据函数签名为 func(int)bool 的函数 fn 进行搜索,返回第一个使得函数fn返回值为true的索引
sort.sort (s)                            //排序类型为sort.interface的切片s

在Go语言中,对字符串的排序都是按照字节排序,也就是说在对字符串排序时是区分大小写的。

二分搜索算法
Go语言中提供了一个使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比较㏒₂n个元素,其中n为切片中元素的总数。
sort.Search(size,fn)函数接受两个参数:所处理的切片的长度和一个将目标元素与有序切片的元素相比较的函数,该函数是一个闭包,如果该有序切片是升序排列,那么在判断时使用 有序切片的元素 >= 目标元素。该函数返回一个int值,表示与目标元素相同的切片元素的索引。

在切片中查找出某个与目标字符串相同的元素索引

func main() {
   var arrString  = []string{"Hello","hello","asxs","sxas","Abc","ABC"}
   fmt.Printf("Unsorted: %q\n",arrString)
   sort.Strings(arrString)
   fmt.Printf("Sorted: %q\n",arrString)
   target := "hello"
   i := sort.Search(len(arrString), func(i int) bool {
      return arrString[i] >= target
   })
   if i<len(arrString) && arrString[i] == target { //这里可以采用 strings.EqualFold(arrString[i],target)
      fmt.Println(i)
   }
}

---output----
Unsorted: ["Hello" "hello" "asxs" "sxas" "Abc" "ABC"]
Sorted: ["ABC" "Abc" "Hello" "asxs" "hello" "sxas"]
4

相关文章

  • Go语言 排序与搜索切片

    Go语言标准库中提供了sort包对整型,浮点型,字符串型切片进行排序,检查一个切片是否排好序,使用二分法搜索函数在...

  • Go语言切片

    // //Go语言切片 // /* // go语言切片是对数组的抽象 // Go 数组的长度不可改变,在特定场景中...

  • 七、Go切片

    七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...

  • go语言切片

    简介 切片 是一种数据结构,这种数据结构便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和...

  • GO语言切片

  • go 语言切片

    go 语言切片 简单切片 slice 是 对 array 的一个 view 创建简单切片 切片作为函数参数 对切...

  • GO基础4-切片排序算法

    目录 1、选择排序2、冒泡排序3、GO 内置Sort包对切片排序 1.选择排序 2.冒泡排序 3.Sort包

  • Go每日精选(2019-06-14)- 基础部分

    1. Go语言的传参和传引用 2. PHP转Go系列:数组与切片 3. Golang 入门 : channel(...

  • 八、Go range的用法

    八、Go语言range Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slic...

  • go 语言 数组声明与切片

    声明数组语法 var a = [10]int{} 长度[]+类型+{} 等于 一个数组的声明 ,如果数组里面的值没...

网友评论

      本文标题:Go语言 排序与搜索切片

      本文链接:https://www.haomeiwen.com/subject/mzsqiftx.html