c语言的折半查找法

来源:百度知道 编辑:UC知道 时间:2024/06/18 05:01:25
把15个数由大到小的顺序存放在一个数组中,输入一个数,用折半查找法找出该数是数组中的第几个元素。如果该数不在数组中,则输出无次数。
网上答案很多,不要来了~能说下思路吗?能让我明白要用什么能做出来,你就是采纳答案

你的数组的索引为0-14
所以你可以设两个变量
这两个变量a,b是用来限制你要的数的范围的

一开始a=0 b=14
接着取索引为int((a+b)/2 )的元素与你输入的比较
如果比输入的小的话那么设a=int(a+b)/2 )
接着继续取索引为int((a+b)/2 )的元素与你输入的比较
如果比输入的大的话那么设b=int(a+b)/2 )继续找下去 如果相等的话就打印并break
不然一直到a=b退出循环

折半查找
1 。数组必须是按循序排列的
2。顾名思义再就折半查找

所谓折半查找,是基于你的数组已经是顺序排好的。
就如你说的“15个数由大到小的顺序存放在一个数组中”,我们记为array[15]
第一次的比较就是让输入的数num与15个数的中间的那个数比,也就是array[7].
如果num小于array[7],
第二次比较就是比较num与array[8]至array[14]的中间数(即array[11]),否则就比较array[0]至array[6]的中间数(即array[3]),依次类推

首先数组必须是按顺序排列
用a[1]...a[10]说吧
先和a[5]做比较,要是答案比a[5]大的话,那它必定在a[6]...a[10]之间,
然后在和a[8]比,这样下去。。。每次都是取中间的那个比

既然按顺序排了就很简单了,以这道题为例。先取出第7个数,比较大小。if 判断 如果大 与(7+1)/2 第4个数比 如果小 与(7+15)/2 第11 个数比相当于判断一次少一半的可能性。依此类推。。。直到找出那个数或是两个相邻的数之间就停止了。

折半,故名思意,把拍好的数组不停地分成一半查找
例如你说有15个数
(1)取中间一个数a[6](要是数组是偶数,就取左边一个)和目标数比较
(2)要是比较结果为目标数大(表明要找的数就在a[7]~a[14]里或没有),就在a[7]~a[14]之间取中间数a[10],和目标数比较
(3)不停地比,直到找到目标数,返回下标。