欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言實(shí)現(xiàn)二分查找方法示例

 更新時間:2023年12月22日 11:28:47   作者:低配全棧  
這篇文章主要為大家介紹了Go語言實(shí)現(xiàn)二分查找方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

使用官方sort包提供search方法快速實(shí)現(xiàn)

對已經(jīng)排好序的數(shù)據(jù), 想快速地找出某一個在對應(yīng)slice的位置索引, 我們可以使用官方sort包提供的search方法快速地實(shí)現(xiàn)二分查找.

官方源碼實(shí)現(xiàn)也非常簡單

func Search(n int, f func(int) bool) int {
  // Define f(-1) == false and f(n) == true.
  // Invariant: f(i-1) == false, f(j) == true.
  i, j := 0, n
  for i < j {
    h := int(uint(i+j) >> 1) // avoid overflow when computing h
    // i ≤ h < j
    if !f(h) {
      i = h + 1 // preserves f(i-1) == false
    } else {
      j = h // preserves f(j) == true
    }
  }
  // i == j, f(i-1) == false, and f(j) (= f(i)) == true  =>  answer is i.
  return i
}

sort.Search的作用就是通過二分法, 找到滿足條件的, 即函數(shù)f返回true的數(shù)據(jù)的最小索引, 如果無法找到目標(biāo)值, 則返回參數(shù)n的結(jié)果.

在實(shí)際業(yè)務(wù)中, n一般都是使用查找切片數(shù)據(jù)的長度, 所以在Search方法返回之后, 需要判斷i是否還是目標(biāo)切片的合理索引.

查找第一個大于等于x的索引

func SearchTargetAfter(dataList []int, x int) int {
    return sort.Search(len(dataList), func(i int) bool {
        return dataList[i] >= x
    })
}

查找第一個小于等于x的索引

func SearchTargetBefore(dataList []int, x int) int {
    return sort.Search(len(dataList), func(i int) bool {
        return dataList[i] <= x
    })
}

查找一個確定的數(shù)

那么我就要查找一個確定的數(shù), 我們該怎么做呢?

舉個例子

arrInts := []int{1, 3, 4, 9, 12, 13}
findPos := sort.Search(len(arrInts), func(i int) bool {
  return arrInts[i] == 4
})

結(jié)果輸出, 并不是2, 而是6. 仔細(xì)去看上面的源碼也不難發(fā)現(xiàn), 官方的二分查找的方法, 如果使用了數(shù)值相等來判斷, 就要讓數(shù)據(jù)正好落在每次的二分的位置這樣才能找到, 比如上述的代碼中, 原始的切片數(shù)據(jù)不變的情況下, 如果改為查找的目標(biāo)為9, 那么是可以正確獲取位置的.

因此這里要注意, 如果要查找確定的數(shù)字的目標(biāo)位置, 使用sort.Search方法的時候, func的返回值, 需要使用上述的找到第一個大于等于目標(biāo)索引的位置, 或者小于等于目標(biāo)索引的位置, 得出來索引位置之后, 再去獲取索引值是否跟目標(biāo)數(shù)據(jù)一樣, 來判斷該數(shù)據(jù)是否存在這個數(shù)組中以及它所處的位置.

以上就是Go語言實(shí)現(xiàn)二分查找方法示例的詳細(xì)內(nèi)容,更多關(guān)于Go 二分查找的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 提升Go語言開發(fā)效率的小技巧實(shí)例(GO語言語法糖)匯總

    提升Go語言開發(fā)效率的小技巧實(shí)例(GO語言語法糖)匯總

    這篇文章主要介紹了提升Go語言開發(fā)效率的小技巧匯總,也就是Go語言的語法糖,掌握好這些可以提高我們的開發(fā)效率,需要的朋友可以參考下
    2022-11-11
  • Golang中的http.Server源碼深入分析

    Golang中的http.Server源碼深入分析

    這篇文章主要介紹了Golang中的http.Server源碼,實(shí)現(xiàn)一個http.Server非常容易,只需要短短幾行代碼,同時有了協(xié)程的加持,Go實(shí)現(xiàn)的http.Server能夠取得非常優(yōu)秀的性能,下面我們來分析看看http.Server的源碼
    2023-05-05
  • Go語言:打造優(yōu)雅數(shù)據(jù)庫單元測試的實(shí)戰(zhàn)指南

    Go語言:打造優(yōu)雅數(shù)據(jù)庫單元測試的實(shí)戰(zhàn)指南

    Go語言數(shù)據(jù)庫單元測試入門:聚焦高效、可靠的數(shù)據(jù)庫代碼驗(yàn)證!想要確保您的Go應(yīng)用數(shù)據(jù)層堅(jiān)如磐石嗎?本指南將手把手教您如何利用Go進(jìn)行數(shù)據(jù)庫單元測試,輕松揪出隱藏的bug,打造無懈可擊的數(shù)據(jù)處理邏輯,一起來探索吧!
    2024-01-01
  • 源碼分析Golang?log是如何實(shí)現(xiàn)的

    源碼分析Golang?log是如何實(shí)現(xiàn)的

    go語言的log包提供了簡單的日志記錄功能,允許開發(fā)者在應(yīng)用程序中記錄重要的信息、錯誤、警告等,log包是Go標(biāo)準(zhǔn)庫的一部分,因此,使用它不需要安裝額外的第三方庫,本文給大家源碼分析了Golang?log是如何實(shí)現(xiàn)的,需要的朋友可以參考下
    2024-03-03
  • golang 后臺進(jìn)程的啟動和停止操作

    golang 后臺進(jìn)程的啟動和停止操作

    這篇文章主要介紹了golang 后臺進(jìn)程的啟動和停止操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Ubuntu安裝Go語言運(yùn)行環(huán)境

    Ubuntu安裝Go語言運(yùn)行環(huán)境

    由于最近偏愛Ubuntu,在加上作為一門開源語言,在Linux上從源代碼開始搭建環(huán)境更讓人覺得有趣味性。讓我們直接先從Go語言的環(huán)境搭建開始
    2015-04-04
  • Kafka安裝部署+go整合過程

    Kafka安裝部署+go整合過程

    go語言是一種快速、分布式、并發(fā)編程的語言,它天生適合于處理高并發(fā)場景下的消息傳遞和處理,在本文中,我們將介紹Kafka安裝部署+go整合過程,感興趣的朋友一起看看吧
    2024-08-08
  • GO語言中接口和接口型函數(shù)的具體使用

    GO語言中接口和接口型函數(shù)的具體使用

    本文主要介紹了GO語言中接口和接口型函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang 實(shí)現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    golang 實(shí)現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    這篇文章主要介紹了golang 實(shí)現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    在上一節(jié)中創(chuàng)建了項(xiàng)目,這篇文章主要介紹如何用Go語言標(biāo)準(zhǔn)庫創(chuàng)建路由,文中有詳細(xì)的代碼示例,對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下
    2023-05-05

最新評論