C语言之折半查找(二分查找)
一、什么是折半查找?
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
算法复杂度编辑
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
时间复杂度无非就是while循环的次数!
总共有n个元素,
渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数
由于你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2为底,n的对数)
所以时间复杂度可以表示O()=O(logn)
二、折半查找原理
查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
三、C语言程序代码
#include<stdio.h>
int binserch(int x,int m[],int n);
int main()
{
int a,jieguo;
int m[10]={1,2,3,4,5,6,7,8,9,10};
printf("请输入要找的数:");
scanf("%d",&a);
jieguo=binserch(a,m,10);
if(jieguo==-1)
printf("没找到!\n");
else
printf("在m[%d]位置找到%d\n",jieguo,a);
return 0;
}
int binserch(int x,int m[],int n)//x是要找的数,n为数据的长
{
int low,high,mid;
low=0;high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x<m[mid])
high=mid-1;
else if(x>m[mid])
low=mid+1;
else
return mid;
}
return -1;
}
转载于:https://blog.51cto.com/xxr007/1830368
C语言之折半查找(二分查找)相关推荐
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- Java实现折半查找(二分查找)的递归和非递归算法
Java二分查找实现,欢迎大家提出交流意见. /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: * 1.要求所查找的数组已有序,并且其 ...
- 【Golang第6章:排序和查找】golang怎么排序,golang的顺序查找和二分查找,go语言中顺序查找二分查找介绍和案例
介绍 这个是在B站上看边看视频边做的笔记,这一章是GO语言的排序和查找 有golang怎么排序,golang的顺序查找和二分查找,go语言中顺序查找二分查找介绍和案例,具体请看[文章目录] 配套视频自 ...
- Python查找-二分查找
Python查找-二分查找 二分查找 折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务. 它的基本思想是,将n个元素分成个数大致相 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 详解【C语言】中的二分查找法和折半查找法(例题解答)
目录 问题 思路 详解 代码 问题 在一个有序数组中查找具体的某个数字n 比如我买了一双鞋,你好奇问我多少钱,我说不超过300元.你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜? 答案:你每次猜 ...
- C语言经典算法之二分查找详解
作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:C语言从入门到进阶 语录:Stay hungry stay foolish 集接口文档工具.接口Mock工具.接口自动化测试工具.接口调试工具于一体 ...
- 数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树
一.基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步 ...
- C++ 语言基础 —— STL —— 算法 —— 二分查找算法
STL 中,在 <algorithm> 头文件里提供了两个利用二分查找的方法在一个排好序的数组中进行查找. 在一个从小到大的排好序的数组中: lower_bound(begin,end,n ...
最新文章
- 环境测试明日最后一天 16万次公交车确保市民出行
- 中秋我用CSS写了个嫦娥奔月
- Caused by: org.springframework.amqp.AmqpException: No method found for class [B
- java xml解析_XML的理解以及SAX解析流程
- 中国双面泡棉胶带市场趋势报告、技术动态创新及市场预测
- 查看是否存在DDOS*** netstat
- matlab toolbox 向量,mosek optimization toolbox for matlab提供的函数简介
- 旋转数组leetcode 189
- [转]Linux下用gcc/g++生成静态库和动态库(Z)
- 质量管理五大工具、七大手法知识点总结
- 快速傅里叶变换(FFT):蝶形算法(CT蝴蝶、GS蝴蝶)
- 计算机里什么文件无法删除,电脑里面有哪些不能删除的文件?
- Unity 程序升级(PC版非热更新)
- python中label函数_python实现在函数图像上添加文字和标注的方法
- 用java画哆啦a梦,来画哆啦A梦吧!
- picker多选 vant_vant框架picker选择器形式列表,以及封装
- linux是什么操作系统_Linux的优势
- 11、Microsoft Visual Studio 2022 Installer Projects踩坑一
- jenkins定时备份插件 ThinBackup
- JDBC浅尝辄止——JAVA如何使用最朴素的方法连通数据库
热门文章
- Juniper 210 密码清不掉_三分钟学会如何找回mysql密码
- 谷歌云计算机,google云计算的三大核心技术
- c语言试卷浙江理工大学杀人案件追踪,浙江理工大学c语言期末考试模拟试卷6 .pdf...
- python做毕业设计选题_软妹子的毕业设计:用Python制作防盗门系统!
- 用python批量创建docker_「docker实战篇」python的docker-docker镜像的创建使用dockerfile(3...
- python中面向对象编程简称为_Python基础-面向对象编程
- 提供呼叫中心服务器,呼叫中心系统方案
- 苍溪师范94级计算机与文秘专业就业前景,文秘专业就业前景
- c语言程序设计和数据结构,C语言程序设计与数据结构实践 闵光太主编.pdf
- html水平分隔线样式,CSS生成漂亮的水平分隔线(horizontal rule)设计效果