当前位置:首页 » 编程软件 » 编程折半法

编程折半法

发布时间: 2024-10-12 13:11:59

c语言编程实现“折半查找”的过程。

折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。参考程序,希望对你有所帮助!
#include<stdio.h>
void main()
{
int a[20],x,i,start,end;
printf("input 20 numbers:\n");
for(i=0;i<20;i++) scanf("%d",&a[i]);
printf("please enter the number:\n");
scanf("%d",&x);
for(start=0,end=19;start<=end;)
{
i=start+(end-start)/2;
if (x==a[i])
{
printf("%d",i+1);
getch();
return;
}
else if (x>a[i]) end = i-1;
else start=i+1;
}
}

㈡ 如何计算折半查找的平均查找长度

折半查找可以借助于一个二叉树来描述。

为了简化讨论,则把这棵树近似看成满二叉树,设二叉树的高度为h(h>1)

则,根据二叉树的性质,它有最大节点数n=2^h-1,

则h=log2(n+1) (2是底数)。那么二叉树的第j层节点数为:2^(j-1)

假定每个元素的查找概率相等,则,pi=1/n (pi为第i个节点的查找概率)

那么平均查找长度为 1/n*(1*2^0+2*2^1+3*2^2+……+j*2^(j-1))

则经过化简计算,得平均查找长度为:((n+1)/n ) *log2(n+1)-1 (其中对数中的2为底数:即log以2为底(n+1)的对数)

注 : 当n很大时 ,可近似为 log2(n+1)-1

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找。

而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

(2)编程折半法扩展阅读:

假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=0,上限为h=4,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找。

否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。

用待查关键字值与中间位置的关键字值进行比较;若相等,则查找成功若大于,则在后(右)半个区域继续进行折半查找若小于,则在前(左)半个区域继续进行折半查找。

对确定的缩小区域再按折半公式,重复上述步骤。最后,得到结果:要么查找成功, 要么查找失败。折半查找的存储结构采用一维数组存放。

热点内容
plc编程入门视频教程 发布:2024-10-12 15:23:23 浏览:162
总是在新窗口打开文件夹 发布:2024-10-12 15:16:28 浏览:66
怎么连接加密wifi 发布:2024-10-12 15:10:10 浏览:774
为什么安卓手机游戏体验比苹果好 发布:2024-10-12 14:53:10 浏览:880
小额免密码怎么设置 发布:2024-10-12 14:48:23 浏览:477
java接口转换 发布:2024-10-12 14:30:10 浏览:585
启动脚本执行器失败怎么解决 发布:2024-10-12 14:12:32 浏览:586
安卓系统如何设置息屏时间 发布:2024-10-12 14:11:58 浏览:831
配置资源需要什么条件 发布:2024-10-12 14:07:37 浏览:262
java数据库连接的url 发布:2024-10-12 14:03:25 浏览:784