Go-二分查找算法
Posted 洪城浪子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go-二分查找算法相关的知识,希望对你有一定的参考价值。
Go语言之简单算法的实现——查找算法
Go语言之简单算法的实现——查找算法
1. 二分查找算法
1. 二分查找算法
1.1 二分查找算法: 在指定切片(有序)中查找第一个大于给定值的元素索引
-
递归实现
/**
* 二分查找算法: 在指定切片(有序)中查找第一个大于给定值的元素索引
* 递归实现
* @Param: point []float32 指定的切片
* @Param: v float32 给定的值
* @Return: index int 查找符合条件的元素在切片中的索引
*/
func BinarySearchFirstGreaterByRecursive(point []float32, v float32) int {
size := len(point)
if size == 0 {
// 切片长为空时返回 0
return 0
}
return bsFirstGreaterByRecursive(point, v, 0, size-1)
}
/**
* 二分查找算法的递归部分: 在指定切片(有序)中查找第一个大于给定值的元素索引
* @Param: point []float32 指定的切片
* @Param: v float32 给定的值
* @Param: low, high int 查找的指定上下标
* @Return: index int 查找符合条件的元素在切片中的索引
*/
func bsFirstGreaterByRecursive(point []float32, v float32, low, high int) int {
if low == high && high != 0 {
return high + 1
}
if low > high {
// 下标大于上标
return 0
}
mid := (low + high) / 2
if point[mid] <= v && point[mid+1] >= v {
return mid + 1
} else if point[mid] < v {
return bsFirstGreaterByRecursive(point, v, mid+1, high)
} else {
return bsFirstGreaterByRecursive(point, v, low, mid-1)
}
}
1.2 二分查找算法: 在指定切片(有序)中查找等于给定值的元素索引
/**
* 二分查找算法: 在指定切片(有序)中查找等于给定值的元素索引
* 递归实现
* @Param: point []float32 指定的切片
* @Param: v float32 给定的值
* @Return: index int 查找符合条件的元素在切片中的索引
*/
func BinarySearchEqualByRecursive(point []float32, v float32) int {
size := len(point)
if size == 0 {
// 切片长为空时返回 -1
return -1
}
return bsEqualByRecursive(point, v, 0, size-1)
}
/**
* 二分查找算法的递归部分: 在指定切片(有序)中查找等于给定值的元素索引
* @Param: point []float32 指定的切片
* @Param: v float32 给定的值
* @Param: low, high int 查找的指定上下标
* @Return: index int 查找符合条件的元素在切片中的索引
*/
func bsEqualByRecursive(point []float32, v float32, low, high int) int {
if low > high {
// 下标大于上标
return -1
}
mid := (low + high) / 2
if point[mid] == v {
return mid
} else if point[mid] < v {
return bsEqualByRecursive(point, v, mid+1, high)
} else {
return bsEqualByRecursive(point, v, low, mid-1)
}
}
以上是关于Go-二分查找算法的主要内容,如果未能解决你的问题,请参考以下文章