二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
search.h
#ifndef _SEARCH_H_ #define _SEARCH_H_ void Search(int *a,int num,int n); #endif |
search.c
#include #include "search.h" /************************************** 函数的名:search 函数的功能:二分查找 函数的参数:空 作者: 日期: ******************************************/ void Search(int *a,int num,int n) { int left = 0; int right = n-1; int mid = (left+right)/2; while(a[mid] != num&&left if(a[mid] >num) { right = mid -1; } else if(a[mid] < num) { left = mid +1; } mid = (left+right)/2; } if(a[mid] == num) { printf("查找的结果中:这个值为:%d ",num); } else { printf("查找没有这个值 "); } } |
main.c
#include #include "search.h" int main () { int a[] = {30,44,66,22,48,89,100,20,1,3,6,88}; int n = sizeof(a)/sizeof(int); int i,j; for(i = 0;i for(j = 0;j if(a[j]>a[j+1]) { int tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } for(i = 0;i printf(" %d",a[i]); } printf(" "); int num; while(1) { printf("请输入你要查找的数据: "); scanf("%d",&num); Search(a,num,n); } return 0; } |
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网
网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
图像处理
+关注
关注
27文章
1289浏览量
56720 -
算法
+关注
关注
23文章
4607浏览量
92819
原文标题:二分查找
文章出处:【微信号:qrsworld,微信公众号:嵌入式单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
基于Simulink的视频与图像处理算法的快速实现
基于Simulink的视频与图像处理算法的快速实现
主要内容
视频和图像系统设计基于模型的设计视频和图像
发表于 04-29 14:00
•0次下载
二分搜索算法运用的框架套路
我们前文 我作了首诗,保你闭着眼睛也能写对二分查找 详细介绍了二分搜索的细节问题,探讨了「搜索一个元素」,「搜索左侧边界」,「搜索右侧边界」这三个情况,教你如何写出正确无 bug 的二分
如何理解二分查找算法
本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。
而且,我们就是要深入细节,比如不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二
评论