int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
return 0;
}
题目
输入数字n,在数组arr中找n的值,找到了就打印下标,找不到就打印:找不到
暴力方法1
一个一个找
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int n = 7;
int i = 0;
int sz =sizeof(arr)/sizeof(arr[0]);
scanf("%d",&n);
for(i =0; i<=10;i++)
{
if(n==arr[i])
{ printf("找到了,下标是:%d\n",i);
break;}
}
if(i==sz)
printf("没找到\n");
return 0;
}
暴力方法2
再取一个变量flag
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int n = 7;
int i = 0;
int flag =1;
int sz =sizeof(arr)/sizeof(arr[0]);
scanf("%d",&n);
for(i =0; i<=10;i++)
{
if(n==arr[i])
{ printf("找到了,下标是:%d\n",i);
flag = 0;
break;}
}
if(flag)
printf("没找到\n");
return 0;
}
暴力方法3——bool类型
bool类型的介绍
‼️头文件# include <stdbool.h>
简单理解⬇️
bool➕a➕true➡️1
bool➕a➕false➡️0
实操
#include <stdbool.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int n = 7;
int i = 0;
bool flag =true;
int sz =sizeof(arr)/sizeof(arr[0]);
scanf("%d",&n);
for(i =0; i<=10;i++)
{
if(n==arr[i])
{ printf("找到了,下标是:%d\n",i);
flag = false;
break;}
}
if(flag)
printf("没找到\n");
return 0;
}
二分查找法
理解一下:把所有要查的数字分成两半,看在哪一半➡️再把这一半也分成两半,看看在哪一半➡️就这样不停分下去,直到找到
#include <stdio.h>
#include <stdbool.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int n = 5;
int left=0;
int right= sizeof(arr)/sizeof(arr[0]) -1;
bool flag = true;
scanf("%d",&n);
while(left<=right)
{
int mid=(right + left)/2;
if(arr[mid] < n)
left = mid+1;
else if(arr[mid] > n)
right =mid-1;
else
{
printf("下标是:%d\n",mid);
flag = false;
break;}
}
if(flag)
printf("输入错误\n");
return 0;
}

被折叠的 条评论
为什么被折叠?



