1、规则介绍
在整形有序数组中查找想要的数字,找到了返回下标,找不到返回-1。
2、简单代码实现
#include<stdio.h>
int find(int a,int arr[])//定义一个函数求该数在数组位数
{
int count = 0;//定义一个变量计算数在数组中的位数
int i = 0;
for (i = 0; i < number; i++)//定义一个for循环来从低到高比较
{
if (arr[i] >=a)//若数大于等于a则跳出循环
break;
count++;//若数小于a,则count加1
}
if (arr[i] == a)//辨别数组内是否由数a
return count;
else
return -1;
}
int main()
{
int a = 0;//定义一个待找数
scanf("%d",&a);
printf("%d", find( a,arr));
return 0;
}
输出示例:
3、 折半查找(效率更高)
//折半查找
#include<stdio.h>
#define number 10//宏定义数组大小,以便于修改
int arr[number] = { 1,2,3,4,5,6,7,8,9 };//定义一个有序数组
int find(int a, int left, int right)
{
while(right>=left)
{
int j = (right-left) / 2;
if (a == arr[j])
return j;
if (a < arr[j])
right = j-1;
if (a > arr[j])
left = j+1;
}
return -1;
}
int main()
{
int a = 0;
int left = 0;
int right = number - 1;
scanf("%d", &a);
find(a,left, right);
printf("%d", find(a, left, right));
return 0;
}