查找算法的实现(Go)

实现算法:

  • 线性查找
  • 二分查找递归版
  • 二分查找非递归

代码:

package main

// 线性查找
func LineSearch(arr[]int, val int) int {
    res := -1

    for i := 0; i < len(arr); i++ {
        if arr[i] == val {
            res = i
            break
        }
    }
    return res
}


// 二分查找递归实现
func BinarySearchRecursive(arr []int, v, low, hight int)  int {
    if low > hight{
        return -1
    }
    mid := (low+hight) / 2
    if arr[mid] == v {
        return mid
    }else if arr[mid] > v {
        return BinarySearchRecursive(arr, v, low, mid-1)
    }else {
        return BinarySearchRecursive(arr, v, mid+1, hight)
    }
}


// 二分查找非递归实现
func BinaraySearch(arr []int, v int) int {
    n := len(arr)
    if n == 0 {
        return -1
    }

    low := 0
    high := n - 1

    for low <= high {
        mid := (low + high) / 2
        if arr[mid] == v {
            return mid
        }else if arr[mid] > v {
            high = mid - 1
        }else {
            low = mid + 1
        }
    }
    return -1
}

// 查找最后一个值等于给定值的元素
func BinarySearchLast(arr []int, v int) int {
    n := len(arr)
    if n == 0 {
        return -1
    }
    low := 0
    high := n-1
    for low <= high {
        mid := (low + high) >> 1
        if arr[mid] > v {
            high = mid - 1
        }else if arr[mid] < v {
            low = mid + 1
        }else {
            if mid == n - 1 || arr[mid+1] != v {
                return mid
            }else {
                low = mid + 1
            }
        }
    }
    return -1
}



func main() {
    
}

发布了56 篇原创文章 · 获赞 0 · 访问量 2751

猜你喜欢

转载自blog.csdn.net/ClassmateLin/article/details/104324584
今日推荐