Go语言数据结构和算法(二十七)跳转搜索算法

25 阅读1分钟

跳转搜索是一种用于有序数组的搜索算法.其基本思想是通过固定步骤向前跳转或跳

过某些元素来检查更少的元素.

跳转搜索的步骤是将数组长度的平方根跳跃进行查找.直到找到大于或等于目标的值.

然后实现一个反向搜索来确定最终结果.

1.使用场景:

大型数据集:跳转搜索算法对于大型数据集是有效的.因为其他算法的开销性能影响很大.

近似匹配:跳转搜索算法在搜索近似匹配时很有用.会在数据集中找到最接近目标值的元素.

2.实现:

2.1方法:

package data

import "math"

func JumpSearch(array []int, key int) int {
	var blockSize = int(math.Sqrt(float64(len(array))))
	var i = 0
	for {
		if array[i] >= key {
			break
		}
		if i > len(array) {
			break
		}
		i += blockSize
	}
	for j := i; j > 0; j-- {
		if array[j] == key {
			return j
		}
	}
	return -1
}

2.2main方法:

func main() {
	array := []int{1, 2, 6, 5, 88, 66, 77, 69, 76, 99}
	search := data.JumpSearch(array, 0)
	fmt.Println("search:", search)
}

3.实战:

如何使用Go语言实现跳转搜索.

3.1方法:

package data

import "math"

func JumpSearch(array []int, key int) int {
	var blockSize = int(math.Sqrt(float64(len(array))))
	var i = 0
	for {
		if array[i] >= key {
			break
		}
		if i > len(array) {
			break
		}
		i += blockSize
	}
	for j := i; j > 0; j-- {
		if array[j] == key {
			return j
		}
	}
	return -1
}

3.2main方法:

func main() {
    array := []int{1, 2, 6, 5, 88, 66, 77, 69, 76, 99}
    search := data.JumpSearch(array, 0)
    fmt.Println("search:", search)
}
```



***不见当年金岳霖.***

***  
***

***  
***

***如果大家喜欢我的分享的话,可以关注我的微信公众号***

***念何架构之路***