C语言程序设计中“二分查找”思路具体是怎样的

如题所述

第1个回答  2011-04-02
二分查找,首先是建立在单调的基础上的,比如说你要在一个单调递增的区间里找一个数,你可以每次选择当前区间的中间一个数,和你要找的数相比,如果中间那个数大,那么你要找的数在当前区间的前一半,所以把前一半区间当作当前区间,反之,则把后一般区间当作当前区间,如此循环,直到找到这个数为止。
第2个回答  2011-04-02
你按那名字就可以理解了,这是个一分为二的查找方法,拿你要查找的那个数据和中间的比较,根据大小来去掉另一半。这样的查找方法比你一个个去对比快多了。。
第3个回答  2011-04-02
1、先将数字按一定顺序排列,比如从大到小或者从小到大(假如从小到大)。
2、去所有数中间位置的那个与所要查找的数据比较。
3、根据比较结果(假如比中间数小),在取小的那一半数据,继续从第一步开始执行。
叙述比较不清晰……
假如数列1、2、3、4、5、6、7、8、9,查找2。
1、按从小到大排列,取数列中间的数“5”
2、5与2比较,5大于2
3、从1、2、3、4、5中查找2
5、取1、2、3、4、5这个数列中间的数“3”
6、用3与2比较,3大于2.
7、从1、2、3中查找2
8、取数列中间数“2”
9、2=2查找完毕本回答被提问者采纳

用C语言编写顺序查找和二分查找(折半查找)
顺序查找:在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。复杂度为o(n).二分查找又称折半查找,它是一种效率较高的查找方法。【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排...

C语言中二分法的具体程序是什么呢?
printf("无法找到你要找的数字!\\n");printf("是否继续查找?(Y\/N):\\n");\/\/询问是否开始下一轮查找\/\/ scanf("c",&goon);}while(goon=='y'|| goon=='Y');}

c语言二分查找平均搜索路径长是什么意思 懂的大哥举个例子?
平均搜索路径长,是指对每一个元素的搜索长度求平均值,而每一个元素的搜索长度是一个确定的值。所以,对于在012345中查找2来说,每一次找到的是2,查找长度就是1。

C语言二分法查找
void main(){int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};\/\/hing和low赋初值 scanf("%d",&k);while (high>=low)\/\/>= { m=(high+low)\/2;if(ka[m]) low=m+1;else { printf("yes");return;\/\/这两句地方放错了 } } printf("no");return;\/\/if语...

c语言中什么是算法
1. 描述如何从一个数组中找到最大值:从数组的第一个元素开始,将其设为当前最大值。逐个比较数组中的元素,如果当前元素较大,则将其设为当前最大值。最终,得到的最大值即为数组中的最大值。2. 描述如何进行二分查找:首先确定查找范围的起始点和结束点,然后计算中间点的位置。如果中间点的值...

C语言二分法查找key值 求解析
return mid;\/\/剩下的就是相等的情况,直接返回mid就是查找到的结果 } return -1;\/\/执行到这一步就说明,low>high,没有找到要查找的元素,返回-1表示没有结果 } main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};int a,b,c;b=4;c=fun(a,10,b);if(c==1)printf("not found"...

c语言.编写一个程序,包括主函数和如下子函数。
然后呢,前两句是废话:你的问题在于sort排序是按从大到小排的,而你的二分查找的逻辑是如果当前中间那个数大于要查找的数 ,就往前面查找!!...前面的数不是更大么? 我们要的是更小的啊...所以最后呢,解决方法是,把查找实现中的最后两行代码顺序交换下...把 if(a[i]>z)return search(a,z,...

C语言二分法编程问题
int n; \/* n为文件中的记录个数,n<MAXNUM *\/ RecordNode record[MAXNUM];} SortObject;void binSort(SortObject * pvector) { \/* 按递增序进行二分法插入排序 *\/ int i, j, left, mid, right;RecordNode temp;RecordNode *data = pvector->record;for( i = 1; i < pvector-...

C语言编程,删除数组a中值为x的第一个元素。
这个题目的解题思路为:因为数组a已非递减有序,所以一般先对其进行二分查找,但要找到第一个x所在的下标,然后再对其进行删除。int BitSearch(int a[], int x, int left, int right) { \/*在数组a的从left到right的区域内二分查找x第一次出现的位置,如果不存在返回-1*\/ int mid, i;while(...

C语言 判断一个数是否是数组中的成员 用C语言编程
思路:依次遍历该数组,把每个数和需要判断的数进行比较如果相等则退出循环输出存在,如果遍历结束都找不到则不是其成员。参考代码:include "stdio.h"#define N 5int main(){int a[N]={1,2,3,4,5},i,t;scanf("%d",&t);for(i=0;i<5;i++)if(a[i]==t){printf("%d是其成员!",...

相似回答