Golang实现二分查找法
二分查找法就是实现在一组有序的数字数组集合中最快找到指定元素的下标
思路
①先找到中间的下标middle = (leftIndex + RightIndex) /2 ,然后让中间的下标值和FindVal比较
a:如果arr[middle] > FindVal,那么就向LeftIndex~(midlle - 1)区间找
b:如果arr[middle] < FindVal,那么就向middle + 1 ~RightIndex区间找
c:如果arr[middle] == FindVal,那么直接返回
②从①的a、b、c递归执行,知道找到位置
③如果LeftIndex > RightIndex,则表示找不到,退出
代码/举例
假设说我要查找30这个值,如果按照循环的查找方法,找到30这个值要执行7次。那么如果是按照二分查找呢?好吧,二分查找的过程如下:
1. left = 1, right = 18; mid = (1+18)/2 = 9; 51 > 30
2. left = 1, right = mid - 1 = 8; mid = (1+8)/2 = 4; 15 < 30
3. left = mid + 1 = 5, right = 8; mid = (5+8)/2 = 6; 30 = 30 查找完毕
只需要执行3次,大大减少了执行时间
- //代码
- package main
- import (
- "fmt"
- )
- //二分查找函数 //假设有序数组的顺序是从小到大(很关键,决定左右方向)
- func BinaryFind(arr *[]int, leftIndex int , rightIndex int, findVal int) {
- //判断leftIndex是否大于rightIndex
- if leftIndex > rightIndex {
- fmt.Println("没找到")
- return
- }
- //先找到中间的下标
- middle := (leftIndex + rightIndex) /
- if (*arr)[middle] > findVal {
- BinaryFind(arr, leftIndex, middle - , findVal)
- } else if (*arr)[middle] < findVal {
- BinaryFind(arr, middle + , rightIndex, findVal)
- } else {
- fmt.Printf("找到了,下标是%v\n", middle)
- }
- }
- func main() {
- //定义一个数组
- arr := []int{, , , , , , , , , , , , , , , , , }
- BinaryFind(&arr, , len(arr) - , )
- }
- 找到了,下标是6
Golang实现二分查找法的更多相关文章
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- 用c语言编写二分查找法
二分法的适用范围为有序数列,这方面很有局限性. #include<stdio.h> //二分查找法 void binary_search(int a[],int start,int mid ...
- java for循环和数组--冒泡排序、二分查找法
//100以内与7相关的数 for(int a=1;a<=100;a++){ if(a%7==0||a%10==7||a/10==7){ System.out.print(a+ ...
- 二分查找法 java
前几天去面试,让我写二分查找法,真是哔了狗! 提了离职申请,没事写写吧! 首先二分查找是在一堆有序的序列中找到指定的结果. public class Erfen { public static int ...
- 学习练习 java 二分查找法
package com.hanqi; import java.util.*; public class Test5 { public static void main(String[] args) { ...
- Java-数据结构与算法-二分查找法
1.二分查找法思路:不断缩小范围,直到low <= high 2.代码: package Test; import java.util.Arrays; public class BinarySe ...
- 选择、冒泡排序,二分查找法以及一些for循环的灵活运用
import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...
- R语言实现二分查找法
二分查找时间复杂度O(h)=O(log2n),具备非常高的效率,用R处理数据时有时候需要用到二分查找法以便快速定位 Rbisect <- function(lst, value){ low=1 ...
- java学习之—递归实现二分查找法
/** * 递归实现二分查找法 * Create by Administrator * 2018/6/21 0021 * 上午 11:25 **/ class OrdArray{ private lo ...
随机推荐
- 备份软件 FreeFileSync 怎么用
现在,学会使用备份软件对电脑中的重要资料定期进行备份,已经成为许多办公一族的“必修课”.其中,FreeFileSync 作为一款由国外开源社区开发的免费备份软件,由于其支持跨平台(Windows.Li ...
- 从零开始一起学习SLAM | 神奇的单应矩阵
小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上 ...
- cocos2d-x C++ (Android)集成第三方微信分享
ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...
- 收集:C# WinForm获取当前路径汇总
Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏 //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Loc ...
- 笔记 : win8系统中的VM虚拟机的Ubuntu搭建samba服务
1. 环境准备 (此处使用root超级管理员帐户,执行命令时不用加sudo, 普通帐户需要前面加sudo): (1)安装好Ubutun虚拟系统后,Ubuntu 的软件源配置文件是 /etc/apt/ ...
- windows Server2012 IIS8.0配置安装完整教程
IIS8.0是windows Server2012自带的服务器管理系统,和以往不同,IIS8.0安装和操作都比较简单,界面很简洁,安装也很迅速.今天我们重点完整的演示下Internet Informa ...
- 使用spring的特殊bean完成分散配置
1.在使用分散配置时,spring的配置文件applicationContext.xml中写法如下: <!-- 引入db.properties文件, --> <context:pro ...
- 1.23 codeforces div3 C.Nice Garland
You have a garland consisting of nn lamps. Each lamp is colored red, green or blue. The color of the ...
- html5-button元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 缓存 Memached
https://github.com/enyim/EnyimMemcached http://www.newasp.net/soft/63735.html#downloaded/ http://blo ...