c语言编程实现“折半查找”的过程。
//参考代码如下:
#include stdio.h
int main()
{
int i, j, n, k=0, isFound=0;
int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //测试数组
printf(“请输出一个整数:\n”);
scanf(“%d”, n);
i = (int)15/2; //对折位移量
j = (int)15/2; //取数“指针”
while(k2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(nnum[j])
j = j + (i + 1);
else if(nnum[j])
j = j – (i + 1);
else
{
isFound = 1;
break; //若找到相等数,标记已找到并退出循环
}
}
//输出结果
if(isFound)
printf(“该数是数组中第%d个元素的值\n”, j);
else
printf(“查无此数!\n”);
return 0;
}
c语言的折半查找法
你的数组的索引为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退出循环
C语言中的“折半查找法”是什么?
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
例如排序后的数据是1 5 12 35 64 78 89 123 456
你要查找12,首先用12跟上面排好顺序的9个数中间那个比较(64),1264,因此你查找的数据在前半部分,即1 5 12 35 64,再用12跟前半部分中间那个数比较(12),这样找了2次就找到了
折半查找的目的是提高查找的效率!