当前位置:首页 » 编程语言 » c语言中折半查找法的代码怎么写
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中折半查找法的代码怎么写

发布时间: 2022-05-10 13:46:10

⑴ 折半查找的算法怎么写 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()
{
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语言折半查找法

折半查找法是算法一种,可以被任何计算机语言使用。用C语言自然也可以实现。

1、定义:

在计算机科学中,折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

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,说明没有此数,打印找不到信息,程序结束。

3、C语言参考代码:

intbin_search(intA[],intn,intkey){
//在长度为n的数组A中折半查找值为key的元素,并返回下标值。如果不存在则返回-1.
intlow,high,mid;
low=0;
high=n-1;//初始low和high为数组的两端。
while(low<=high)
{
mid=(low+high)/2;//查找中心点。
if(A[mid]==key)returnmid;//已找到,返回下标值。
if(A[mid]<key){//中点位置比key值小,以mid+1为新的下限值。
low=mid+1;
}
if(A[mid]>key){//中点位置比key值大,以mid-1为新的上限值。
high=mid-1;
}
}
return-1;//未找到,返回-1.
}

⑷ 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;

}

⑸ 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>
intlook_up(inta[],intn,intx)
{
intleft=0,right=n-1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(x==a[mid])
returnmid+1;//加一后才是它的逻辑位序
elseif(x<a[mid])
right=mid-1;
else
left=mid+1;
}
if(left>right)
return-1;
}
intmain()
{
inta[100],n,x,i,result;
scanf("%d",&n);
for(i=0;i<n-1;i++)
scanf("%d,",&a[i]);
scanf("%d",&a[i]);
scanf("%d",&x);
result=look_up(a,n,x);
if(result>=0)
printf("%d ",result);
else
printf("No ");
}

⑺ 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语言程序编写——折半查找法

#include<stdio.h>
intmain()
{inta[16]={15,14,13,12,11,10,9,8,7,6,5,4,3,1,0};
intl=0,r=15,mid,x;
scanf("%d",&x);
do
{mid=(l+r)/2;
if(a[mid]==x)break;
if(x>a[mid])r=mid-1;
elsel=mid+1;
}while(l<=r);
if(a[mid]==x)
printf("a[%d]=%d ",mid,x);
else
printf("无此数 ");
return0;
}

⑼ 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语言中怎样利用折半查找法(二分查找法)找到数列中的一个数

根据需求,用二分法查找指定数组中的指定数字,代码如下:
#include <stdio.h>
// 在长度为len的数组a中寻找n,找到就返回数组下标,没找到就返回-1
int search(int a[], int len, int n)
{
int index = -1;
int left = 0, right = len, mid = (left + right) / 2;

while (left <= right)
{
if (n == a[mid])
{
index = mid;
break;
}
elseif (n > a[mid])
{
left = mid + 1;
mid = (left + right) / 2;
}
else
{
right = mid - 1;
mid = (left + right) / 2;
}
}

return index;
}
int main()
{
int array[] = {5, 8, 13, 17, 23, 25, 29, 50, 53}; // 数组
int length = 9; // 数组长度
int aim = 17; // 查找目标

// 输出查找结果, Search 17 in array[]: 3
printf("Search %d in array[]: %d\n", aim, search(array, length, aim));

return0;
}