DEV Community

Discussion on: Searching Algorithms in Go

Collapse
 
munkhbats profile image
Munkhbat • Edited

This could be a lot faster for Binary search.

package main

import "fmt"

func binarySearch(arr []int, s int, index int) (int, bool) {
    var leftPointer = 0
    var ret int
    var found bool
    var rightPointer = len(arr) - 1
    if leftPointer != rightPointer {
        var midPointer = int((leftPointer + rightPointer) / 2)
        var midValue = arr[midPointer]

        if midValue == s {
            ret = midPointer + index
            found = true
        } else if midValue < s {
            ret, found = binarySearch(arr[midPointer:rightPointer], s, midPointer)
        } else {
            ret, found = binarySearch(arr[leftPointer:midPointer], s, index)
        }

        if found == false {
            return -1, false
        }
    }

    return ret, true
}

func main() {
    var n = []int{2, 9, 11, 21, 22, 32, 36, 48, 76}
    ret, found := binarySearch(n, 32, 0)

    if found == true {
        fmt.Println("Found : ", n[ret])
    }else{
        fmt.Println("Not found" )
    }
}
Enter fullscreen mode Exit fullscreen mode