二分查找的代码实现|学习笔记

简介: 快速学习二分查找的代码实现

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map: 二分查找的代码实现】与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9650


二分查找的代码实现


内容介绍:

一、二分查找的代码实现


一、二分查找的代码实现

新建一个二分查找的文件夹(binaryfind)新建文件叫 main.go

package main

import (

”fmt”

)

//二分查找的函数

/*

二分查找的思路:比如我们要查找的数是findVal

1. arr 是一个有序数组,并且是从小到大排序

2. 先找到 中间的下标 middle = (1eftIndex + rightIndex)/ 2,然后让 中间下标的值和findVal进行

2.1如果 arr[middle] > findVal ,就应该向 leftIndex ---- (middle - 1)

2.2 如果 arr[middle] < findVal 就应该向 middel+1---- rightIndex

2.3如果 arr[middle] == findVal ,

就找到

2.4 上面的2.1 2.2 2.3的逻辑会递归执行

3.想一下,怎么样的情况下,就说明找不到[分析出退出递归的条件!!]

if leftIndex > rightIndex {

//找不到..

return

*/

func BinaryFind(arr *[6]int,leftIndex int , rightIndex int ,findVal ) {(用一个指针来接收,提高效率)

(因为函数里面要有数组,并且让人知道数组从左边第几个元素开始从右边第几个元素开始,因该还需要两个参数)

//判断 leftIndex 是否大于 rightIndex

if leftIndex > rightIndex {

fmt . Println("找不到" )

return

}

//先找到 中间的下标

Middle: = (leftIndex+ rightIndex) / 2

if (*arr)[middle] > findVal {(往左边走还是右边走,跟数组本身的顺序有关;现在是从小到大中间的数还大于别人就应该向左边走)

//说明我们要查找的数,应该在 leftIndex --- middel-1

BinaryFind(arr, leftIndex,middle - 1, findVal)

} else if (*arr)[midd1e] < findval {(中间的这个数小于 findval)//说明我们要查找的数,应该在 middel+1 --- rightIndex

BinaryFind(arr, middle + 1, rightIndex, findval)

} else {(相等的话)

//找到了

fmt . Printf("找到了,下标为%v \n", middle)

}

}

Func main () {

Arr  :=[6]int {6,8,10,89,1000,1234}

}

//测试一把(找到的)

BinaryFind() (& arr ,0, len(arr)-1,1000)

D: \ go project\src \go _code \chapter08 \f inddemo>cd

D: \go project s \ src \go _code \c hapter08>cd b inaryf indD: \ go project\ src \go_ code \c hapter08\ binaryf ind>go run main _go

找到了,下标为4

//测试一把(找不到的)

BinaryFind() (& arr ,0, len(arr)-1,-6)

D: \ go project\ src \go_ code \c hapter08\ binaryf ind>go

run main _go

找不到

说明代码没有问题

整理代码

相关文章
|
16小时前
|
算法 Java C++
归并排序代码实现
归并排序代码实现
17 0
|
9月前
|
算法 C语言 C++
【双指针问题】LeetCode344、345、 844、283问题详解及代码实现
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
49 0
|
9月前
|
算法 C语言 C++
【双指针问题】LeetCode:392、3、11问题详解及代码实现
本篇总结过去一周内遇到双指针问题。
77 0
|
10月前
|
算法 搜索推荐
【排序算法】5行代码实现冒泡排序
【排序算法】5行代码实现冒泡排序
|
10月前
|
算法
【二分查找】详细图解
【二分查找】详细图解
141 0
|
10月前
|
算法
二分查找进阶版
二分查找进阶版
|
10月前
|
算法
力扣704二分查找:思路分析+代码实现(递归与非递归)
力扣704二分查找:思路分析+代码实现(递归与非递归)
78 0
|
11月前
二分查找【多种方法+图解】
介绍以及简单思路介绍 第一种解法,[left,right]区间 第二种解法,[left,right)区间
59 0
|
12月前
|
Java C语言 C++
数据结构之排序【快速排序和归并排序的非递归代码实现及分析】
数据结构之排序【快速排序和归并排序的非递归代码实现及分析】
|
存储 算法 搜索推荐
【C语言程序设计】知识点汇总7——排序与查找原理与代码(冒泡排序,选择排序,插入排序,二分查找)
【C语言程序设计】知识点汇总7——排序与查找原理与代码(冒泡排序,选择排序,插入排序,二分查找)
140 0