0
点赞
收藏
分享

微信扫一扫

折半查找(c语言)


折半查找

  • ​​描述​​
  • ​​格式​​
  • ​​样例​​
  • ​​题解及注释​​

描述

给定一个长度为n(n≤10000)的单调递增整数数列,和要查找的整数,利用折半查找算法找到该数据。输出成功找到该数据所需的比较次数;如果查找未成功,则输出0。

比如有序列: 15 25 26 34 40 41 49 57 64 74

要查找25,则查找次数为2次。

再有序列:10 19 24 30 31 41 49 54 57 61 63 65 72 78 83

要查找31,则查找次数为4次。

再有序列: 7 17 20 27 30 38 48 52 55 61 66 72 79 86

要查找17,则查找次数为4次。

上述序列如果要查找60,则应输出0(查找未成功)

格式

输入格式
输入数据为两行,第一行两个整数,第一个整数n表示序列的长度,第二个整数data,表示要查找的数据。第二行是由n个整数组成的单调递增序列。

输出格式
输出一个整数,如果找到数据,则输出找到该数据所花的比较次数;如果没有找到该数据,输出0

样例

输入样例
10 13
9 12 13 19 26 28 29 37 40 43
输出样例
3

题解及注释

#include <stdio.h>
#include <stdlib.h>
#define maxn 10005

int search(int array[],int n,int value)//array[]即使主函数的a数组
{
int low,high,mid;
low=0;
high=n-1;
int x=1;
while(low<=high)
{
mid=(low+high)/2;//这里是折半查找的很关键的一布了
if(array[mid]==value)
{
return x;
}
else
{
if(value<array[mid])
{
high=mid-1;
}
if(value>array[mid])
{
low=mid+1;
}
}
x++;
}
return 0;
}
int main()
{
int n,data;
int a[maxn];
scanf("%d%d",&n,&data);
for(int i=0;i<n;i++)//遍历输入
{
scanf("%d",&a[i]);
}
int res;
res=search(a,n,data);//调用函数,a是数组,直接传入
if(res!=0)
{
printf("%d\n",res);
}
else
{
printf("0\n");
}

}

折半查找(c语言)_数据


写于2021年7月22日11:52分


举报

相关推荐

0 条评论