C语言 二分法查找数组元素
什么是二分法
二分法在数学上的定义:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
二分法应用算法
在用二分法进行查找时,查找对象的数组必须是有序的,即各数组元素的次序是按其值的大小顺序存储的。其基本思想是先确定待查数据的范围(可用 [low,high] 区间表示),然后逐步缩小范围直到找到或找不到该记录为止。具体做法是:先取数组中间位置(mid=(low+high)/2)的数据元素与给定值比较。若相等,则查找成功;否则,若给定值比该数据元素的值小(或大),则给定值必在数组的前半部分[low,mid-1](或后半部分[mid+1,high]),然后在新的查找范围内进行同样的查找。如此反复进行,直到找到数组元素值与给定值相等的元素或确定数组中没有待查找的数据为止。因此,二分查找每查找一次,或成功,或使查找数组中元素的个数减少一半,当查找数组中不再有数据元素时,查找失败。
例子
在有序数组arr[11]={1,8,15,21,35,54,63,79,82,92,97}中,我们来查找数字82和数字87 图一为搜索元素82的演示过程 图二为搜索87的演示过程
(图一)
(图二)
代码实现(VS C语言)
#include<stdio.h>int Binary_search(int arr[],int key,int n)
{int low = 0; //定义low为0号元素int high = n - 1; //定义high为下标最大的元素int mid; //数组中间元素的下标while (low <= high) //只要低号位元素小于或等于高号位元素,说明还没查找到元素,循环继续{mid = (low + high) / 2; //中间元素下标定义if (arr[mid] < key) //当所查找的元素比中间值大,说明要查找的元素在右半区,{ low = mid + 1; //key在右半区,改变low的值}else if (arr[mid] > key) //当所查找的元素比中间值小,说明要查找的元素在左半区,{high = mid - 1; //key在左半区,改变high的值}else //如果前面两个条件都不满足,说明已经找到key 满足条件 key==mid 返回mid{return mid; }}return -1; //当跳出循环还没有返回值,说明没找到想要的元素,返回-1}int main()
{int key;int arr[] = { 3,8,15,21,35,54,63,79,82,92,97}; //定义数组int n = sizeof(arr) / sizeof(int);printf("请输入你要查找的值:\n");scanf("%d", &key); //82 87int index = Binary_search(arr, key,n);printf("你所找的值下标为(-1为不存在): %d\n", index);return 0;
}
执行结果
C语言 二分法查找数组元素相关推荐
- c语言二分法查找数组元素,c语言二分法如何实现查找数组元素
c语言二分法实现查找数组元素的方法:1.递归算法,代码为[if(a[mid] == key) return mid]:2.非递归算法,代码为[while( left < right && ...
- C语言二分法查找数组
C语言二分法查找数组 要实现的功能如下 完整源代码实现如下 要实现的功能如下 采用二分法查找,若找到输出:数所在的下标,否则输出sorry 完整源代码实现如下 #include "stdio ...
- java 二分法查找数组,Java二分法查找数组元素下标
package pers.ly.javase.algorithm; import java.util.Arrays; /** * 二分法查找 * @author: Lu Yang * @date: 2 ...
- C语言——二分法查找一个数_数组
C语言--二分法查找一个数_数组 问题描述: 针对一个按顺序排列的一维数组,用户输入一个数,如何辨别它是否存在?是数组中的第几位? 编程思想: 采用二分法,以最中间的数和用户输入的数进行比较,逐步缩小 ...
- php 查找数组指定元素,php查找数组元素各种方法总结
在php中数据查询可以分类一维数组查找,与多维数组查找了,如果是简单的一维数组我们可以直接使用in_array ,array_search 与遍历来实例了,如果是多维数组就需要使用其它办法. 对于一维 ...
- C语言二维数组元素的多种表示方法小结
C语言二维数组元素的多种表示方法小结 昨天,一个小可爱问我,为何函数中,数组可以改变主函数中的值,比如b[i],就可以改原来数组中的值.其实b[i] 等价于 *(b + i)也是通过地址间接更改的,小 ...
- 在c语言中引用数组元素时,其数组下标的数据类型允许是什么
在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式.C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为"数组名[下标]",下标可以是 ...
- ZZULIOJ 1117: 查找数组元素
查找数组元素 题目描述 输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出删除元素后的数组.如果不存在,输出"Not Found". 定义一个查找函数f ...
- 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)
代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g 提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...
最新文章
- cf792b循环链表
- 如何才能加深对Linux概念架构的理解
- 特征码弊端渐显 杀毒技术面临革命
- 基于softmax的文本多分类模型代码实现
- ajax怎么模拟请求,如何模拟AJAX请求?
- java反编译jar包
- QT5编程入门教程(非常详细)
- windows安装caffe
- android缓存bilibili,bilibili缓存姬
- 威密 android,勇士这赛季的结局,是否开始就已注定
- 奇葩需求系列-距离明天十二点倒计时
- Go语言中的complex(复数)
- 每周分享第 47 期
- 从C/C++到Python(之一)(By Robinvane Suen)
- Android系统各个版本系统特性整理(1.1-6.0)
- 【C++】C++调用Python
- Hibernate的关系映射——Many-To-Many(多对多)
- 面试答案-简单回答k8s容器启动的过程
- 【苹果电脑数据恢复】mac超强数据恢复软件免费下载
- 百度地图api开发详解(android版).pdf,百度地图API开发指南原版.pdf
热门文章
- android接口调用超时,RCA:收单设备调用云端接口频繁超时排查总结
- 计算机图形学考题答案,计算机图形学考题答案.doc
- 压缩包安装_SPSS 21 下载(内附压缩包及安装过程)
- qmenu基本用法_使用QProxyStyle定制QMenu (二)
- Unsupported major.minor version 51.0 jdk版本错误解决方案 eclipse版
- Maven创建的Web项目无法使用EL表达式
- android 上下滑动重影
- 打印倍数_英语精读:3d打印的速度有望提高到100倍
- kali linux set工具,求助: 社会工程学工具set 出现错误for kali linux.
- 最简单的SpringMVC + Maven配置