💀😺又来了奥😺💀
😂dddd😂
描述:
有 n 个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“cannot find ”(
思路:
首先计算数组中间的位置,将数组中间位置处的值与要查找的值进行比较,如果相等,则查找成功;否则利用中间位置将数组分为左、右两个子数组,如果中间位置的值大于要查找的值,则查找左边的数组,否则查找右边的数组。重复上面的过程,直到找到要查找的值为止,否则查找失败。
为未找到的数字)。
#include <stdio.h>
#define N 15//随意设置多少数
void my(const int brr[],int k)
{
int left=0;
int right=N-1;
int mid=(left+right)/2;
int cout=6;//随便设一个数纪录
while(left<=right)
{
mid=(left+right)/2;
if(brr[mid]<k)
left=mid+1;
if(brr[mid]>k)
right=mid-1;
if(brr[mid]==k)
{
printf("%d position is %d",k,mid+1);//找到了
cout++;//找到数就会加一
break;
}
}
if(cout==6)//没变化就是没找到想要的数
printf("cannot find %d",k);
}
int main()
{
int arr[100];
for(int i=0;i<N;i++)
{
scanf("%d",&arr[i]);
}
int n=0;
scanf("%d",&n);
my(arr,n);
return 0;
}
例子:(输入)
1 3 4 5 6 8 12 23 34 44 45 56 57 58 68 7
输出
cannot find 7
下期见