go语言查找算法 | 青训营笔记

134 阅读2分钟

线性查找(Linear Search)和二分查找(Binary Search)是两种常见的查找算法,它们具有不同的特点和适用场景。

线性查找是一种简单直观的查找算法,适用于未排序或无序的数据集。它的工作原理是逐个遍历数据集中的元素,与目标值进行比较,直到找到匹配的元素或遍历完整个数据集。线性查找的时间复杂度是O(n),其中n是数据集的大小。如果数据集中的元素无序,或者需要找到多个匹配的元素位置,线性查找是一种有效的选择。

二分查找是一种针对有序数据集的高效查找算法。它的前提是数据集已经按照升序或降序进行排序。二分查找通过将数据集划分为两部分,并将目标值与中间元素进行比较,从而确定目标值可能存在的位置。如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找;如果相等,则找到了目标值。通过不断缩小查找范围,二分查找的时间复杂度是O(log n),其中n是数据集的大小。对于较大的有序数据集,二分查找通常比线性查找更快速有效。 在Go语言中,可以使用标准库中提供的查找算法函数来实现常见的查找。以下是一些常见的查找算法的示例代码:

  1. 线性查找(Linear Search):
package main

import "fmt"

func linearSearch(arr []int, target int) int {
	for i, num := range arr {
		if num == target {
			return i
		}
	}
	return -1
}

func main() {
	arr := []int{4, 2, 9, 7, 5, 1, 8}
	target := 5
	index := linearSearch(arr, target)
	if index != -1 {
		fmt.Printf("Target %d found at index %d\n", target, index)
	} else {
		fmt.Printf("Target %d not found\n", target)
	}
}
  1. 二分查找(Binary Search):
package main

import "fmt"

func binarySearch(arr []int, target int) int {
	low, high := 0, len(arr)-1
	for low <= high {
		mid := (low + high) / 2
		if arr[mid] == target {
			return mid
		} else if arr[mid] < target {
			low = mid + 1
		} else {
			high = mid - 1
		}
	}
	return -1
}

func main() {
	arr := []int{1, 3, 5, 7, 9, 11, 13}
	target := 7
	index := binarySearch(arr, target)
	if index != -1 {
		fmt.Printf("Target %d found at index %d\n", target, index)
	} else {
		fmt.Printf("Target %d not found\n", target)
	}
}

这些示例代码演示了使用Go语言实现常见的查找算法,包括线性查找和二分查找。你可以根据需要自行调整代码和输入数据。