二分算法思想:
1、定义下标min指向第一个元素,定义max指向最后一个元素
2、定义下标mid等于(min+max)/2
3、判断arr[mid]是否等于要查找的数,若等于返回mid值,
若不等于,如果小于,则min = mid+1,如果大于,则max = mid-1;
4、while循环执行第3步,直到min大于max
找到的话返回下标mid;
若未找到,则退出,并打印“没有找到”。
代码如下:
#include <stdio.h>
#define N 20
//算法:二分查找
int my_find(int arr[],int count, int item)
{
int min = 0;
int max = count-1;
int mid = 0;
while(min <= max)
{
mid = (min + max) / 2;
if(arr[mid] == item)
{
printf("找到了!\nmid = %d\n", mid);
return mid;
}
else if(arr[mid] < item)
{
min = mid + 1;
}
else if(arr[mid] > item)
{
max = mid -1;
}
}
printf("没有找到!\n");
return -1;
}
int main(int argc, const char *argv[])
{
int arr[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
int item = 0;
printf("请输入要查找的数据:\n");
scanf("%d", &item);
my_find(arr,N,item);
}
运行结果如下图: