在Go(Golang)中对排序的数组进行二进制搜索的程序

107 阅读1分钟

概述

这个想法是对输入数组中的一个给定的目标元素进行二进制搜索。如果目标元素存在,则输出索引。如果输出元素不存在,则输出-1。

预计时间复杂度为O(logn)

例子1

Input: [1, 4, 5, 6]
Target Element: 4
Output: 1

Target element 4 is present at index 1

例二

Input: [1, 2, 3]
Target Element: 4
Output: -1

Target element 4 is present at index 1

程序

package main

import "fmt"

func search(nums []int, target int) int {
	return binarySearch(nums, 0, len(nums)-1, target)
}

func binarySearch(nums []int, start, end, target int) int {
	if start > end {
		return -1
	}
	mid := (start + end) / 2

	if nums[mid] == target {
		return mid
	}

	if target < nums[mid] {
		return binarySearch(nums, start, mid-1, target)
	} else {
		return binarySearch(nums, mid+1, end, target)
	}
}

func main() {
	index := search([]int{1, 4, 5, 6}, 4)
	fmt.Println(index)

	index = search([]int{1, 2, 3, 6}, 4)
	fmt.Println(index)
}

输出

1
-1