golang 中sort包sort.search()使用教程

來源:互聯網
上載者:User

func Search(n int, f func(int) bool) int

search使用二分法進行尋找,Search()方法回使用“二分尋找”演算法來搜尋某指定切片[0:n],並返回能夠使f(i)=true的最小的i(0<=i<n)值,並且會假定,如果f(i)=true,則f(i+1)=true,即對於切片[0:n],i之前的切片元素會使f()函數返回false,i及i之後的元素會使f()函數返回true。但是,當在切片中無法找到時f(i)=true的i時(此時切片元素都不能使f()函數返回true),Search()方法會返回n(而不是返回-1)。

Search 常用於在一個已排序的,可索引的資料結構中尋找索引為 i 的值 x,例如數組或切片。這種情況下,實參 f,一般是一個閉包,會捕獲所要搜尋的值,以及索引並排序該資料結構的方式。

為了尋找某個值,而不是某一範圍的值時,如果slice以升序排序,則 f func中應該使用>=,如果slice以降序排序,則應該使用<=. 例子如下:package main

package main    import (      "fmt"      "sort"  )    func main() {      a := []int{1, 2, 3, 4, 5}      b := sort.Search(len(a), func(i int) bool { return a[i] >= 30 })      fmt.Println(b)       //5,尋找不到,返回a slice的長度5,而不是-1      c := sort.Search(len(a), func(i int) bool { return a[i] <= 3 })      fmt.Println(c)                             //0,利用二分法進行尋找,返回合格最左邊數值的index,即為0      d := sort.Search(len(a), func(i int) bool { return a[i] == 3 })      fmt.Println(d)                          //2     }  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.