1、使用折半查找法在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1。
2、思路:首先取中间值与要查找的数进行对比,由于数据是有序的,故可由此得到新的区间,依次可逐渐缩小区间,从而快速得到结果。找到返回下标,否则返回-1.
3、程序:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int search_number(int num, int left, int right, int a[]);
int main()
{
int a[] = { 4, 9, 12, 23, 45, 48, 67, 98 };
printf("输入要查找的数字");
int num;
scanf("%d", &num);
int left = 0;
int right = sizeof(a)-1;
search_number(num, left, right, a);
system("pause");
return 0;
}
int search_number(int num, int left, int right, int a[])
{
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (a[mid] > num)
{
right = mid - 1;
}
else if (a[mid] < num)
{
left = mid + 1;
}
else
{
printf("找到了,下标为%d\n", mid);
return mid;
}
}
printf("找不到\n");
return -1;
}
4、结果: