#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int serch(int a[],int b,int c)
{
int left = 0;
int right = c - 1;
while (left <= right) //只要a[left] <= a[right],那么程序就一直找下去,若left>right,代表数字不在有序数组里面。
{
int mid = (left + right) / 2;
if (a[mid] < b)
left = mid + 1; //若a[mid]小于查找数,则查找数在mid右边,此时right不变,把left变成mid+1
else if (a[mid] > b)
right = mid - 1; //若a[mid]大于查找数,则查找数在mid左边,此时left不变,把right变成mid-1
else
{
printf("找到了!"); //若a[mid]既不大于也不等于查找数,那么可以确定a[mid]就是等于查找数,此时mid就是查找数的下标
return mid;
}
}
return -1; //若a[left]大于a[right],显然这在有序数列中是不存在的,可以得到查找数一定不在这个有序数列中,所以返回判断值-1来告诉主函数找不到要找的数的下标
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12}; //有序数组
int k = 0;
printf("请输入要查找的数:>");
scanf("%d", &k);
int r = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
r = serch(arr, k, sz);
if (r == -1)
printf("没有找到\n");
else
printf("找到了,下标为%d\n", r);
return 0;
}
内容的核心为serch()函数,serch()函数使用了有序数组的二分查找原理