当前位置:首页 » 编程语言 » 折半查找c语言

折半查找c语言

发布时间: 2022-09-03 15:44:20

c语言中的折半查找法是什么原理

刚开始的时候数组时排好顺序的:从小到大,或者从大到小。然后将这个数组折中,用中间的这个数和要查找的数比较大小,(例如:如果我从小到大,我将数组这种后,用中间的数和要查找的数比较,如果小,则那个要查找的数绝对在中间靠左的范围里,如果大,则那个要查找的数绝对在中间靠右的范围里,然后同理,慢慢慢慢缩小范围,知道查找到为止)

㈡ 用c语言实现折半查找

#include<stdio.h>

int find(int a[],int x,int n,int m)

{int i;

if(n>m)return -1;

i=(n+m)/2;

if(a[i]==x)return i;

if(a[i]>x)return find(a,x,n,i-1);

return find(a,x,i+1,m);

}

int main()

{

int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51};

int x,i;

printf("已有的数是: ");

for(i=0;i<20;i++)

printf("%d ",a[i]);

printf(" 请输入要查找的数:");

scanf("%d",&x);

if((i=find(a,x,0,19))>=0)

printf("%d是第%d个数 ",x,i+1);

else printf("未找到%d ",x);

return 0;

}

㈢ C语言折半查找法详细代码(假如有10个已排好序的数)

折半查找即二分查找,思想是:在一组有序的数据中查找一个数据,首先将要查找的数据与这组数中间的值比较,如果要查找的数据比它小,则在左半部分中继续查找;若比中间值大,则在右半部分中继续查找,相等的话就表示已找到,直接返回。

这样,每次查找都可以将查找范围缩小一半,以此达到O(log N)的时间复杂度。

折半查找代码如下:

intbsearchWithoutRecursion(intarray[],intlow,inthigh,inttarget)
{
while(low<=high)
{
intmid=(low+high)/2;

if(array[mid]>target)
high=mid-1;
elseif(array[mid]<target)
low=mid+1;
else
returnmid;
}
return-1;
}

㈣ 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语言中的折半查找法是什么

折半查找的前提是已经对数据做好了排序,然后再折半查找
例如排序后的数据是1 5 12 35 64 78 89 123 456
你要查找12,首先用12跟上面排好顺序的9个数中间那个比较(64),12<64,因此你查找的数据在前半部分,即
1 5 12 35 64,再用12跟前半部分中间那个数比较(12),这样找了2次就找到了
折半查找的目的是提高查找的效率 折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
【基本思想】
将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。
二分搜索法的应用极其广泛,而且它的思想易于理解。第一个二分搜索算法早在1946 年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的着作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的。 刚开始的时候数组时排好顺序的:从小到大,或者从大到小。然后将这个数组折中,用中间的这个数和要查找的数比较大小,(例如:如果我从小到大,我将数组这种后,用中间的数和要查找的数比较,如果小

㈥ C语言中的“折半查找法”是什么

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
例如排序后的数据是1 5 12 35 64 78 89 123 456
你要查找12,首先用12跟上面排好顺序的9个数中间那个比较(64),12<64,因此你查找的数据在前半部分,即1 5 12 35 64,再用12跟前半部分中间那个数比较(12),这样找了2次就找到了
折半查找的目的是提高查找的效率!

㈦ 折半查找的算法怎么写 C语言

#include<stdio.h>
void main()
{
int in[15],ins,i,k=14,j=0;
printf("请按照从小到大的顺序输入15个数\n");
for(i=0;i<15;i++) scanf("%d",&in[i]);
printf("请输入要查找的数:");
scanf("%d",&ins);
i=(j+k)/2;
while(j<=k)
{
if(in[i]>ins)
k=i-1;
else
if(in[i]<ins)
j=i+1;
else break;
i=(j+k)/2;
}
printf("你查找的是其中的第%d个数。",i+1);/*i是他的存储的顺序数,i+1才是他在输入数组中的位置数*/
}

㈧ C语言折半查找法

#include<stdio.h>

int main()

{

char a[12]="abcdefklmnp",ch;

int i,top,bot,mid;

printf("Input a character ");

scanf("%c",&ch);

printf("ch=%c ",ch);

top=11;

bot=0;

mid=(top+bot)/2;

while(bot<=top&&a[mid]!=ch)

{if(a[mid]>ch)top=mid-1;

else if(a[mid]==ch)break;

else bot=mid+1;

mid=(top+bot)/2;

}

if(a[mid]==ch)printf("第%d个字符就是%c ",mid+1,ch);

if(bot>top)printf("该字符不存在a中 ");

return 0;

}

㈨ 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(k<2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(n<num[j])
j = j + (i + 1);
else if(n>num[j])
j = j - (i + 1);
else
{
isFound = 1;
break; //若找到相等数,标记已找到并退出循环
}
}
//输出结果
if(isFound)
printf("该数是数组中第%d个元素的值\n", j);
else
printf("查无此数!\n");
return 0;
}

㈩ c语言折半查找 求助大佬

#include <stdio.h>

void sort(int a[],int n)

{

int i,j,t;

for(i=0;i<n-1;++i)

{

for(j=0;j<n-i-1;++j)

{

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

}


int search(int a[],int n, int s)

{

int i,j;

for(i=0,j=n-1;printf("%5d",(i+j)/2),i<j;)

{

if(a[(i+j)/2]<s)

i=(i+j)/2+1;

else

j=(i+j)/2-1;

}

return a[(i+j)/2]==s?(i+j)/2:-1;

}


int main()

{

int a[10],i,s;

for(i=0;i<10;++i)

scanf("%d",&a[i]);

scanf("%d",&s);

sort(a,10);

for(i=0;i<10;++i)

printf("%5d",a[i]);

printf(" ");

printf(" %s",search(a,10,s)>=0?"Success":"Fail");

return 0;

}

热点内容
手动安装交叉编译链 发布:2025-01-15 18:15:30 浏览:563
java调用clinux 发布:2025-01-15 18:13:02 浏览:293
如何给孩子配置一份保险 发布:2025-01-15 18:07:53 浏览:456
思科模拟器ftp配置 发布:2025-01-15 18:01:53 浏览:196
wd软件如何修改密码 发布:2025-01-15 17:59:57 浏览:715
公共代理服务器地址 发布:2025-01-15 17:59:53 浏览:818
android文件图片 发布:2025-01-15 17:39:44 浏览:206
linux的路径怎么写 发布:2025-01-15 17:18:49 浏览:185
php解压程序 发布:2025-01-15 17:06:22 浏览:142
刷助力脚本 发布:2025-01-15 17:02:31 浏览:520