二分查找:比较一次可以减少一半的查找量。
写一个函数,实现一个整形有序数组的二分查找,返回值为所查找数值的下标,如果未查到,则返回-1。
将所要查找的数与中间的数值进行比较,如果相等直接返回
如果小于中间的数则在左半部分查找
否则在右半部分查找
实现代码如下:
#include <stdio.h>
int BinaryFind(int ar[], int n, int key)
{
int left = 0;
int right = n - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (ar[mid] == key)
return mid;
else if (ar[mid] < key)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
int main()
{
int ar[] = { 1,2,3,4,5,6,7,8,9,10 };
int key;
printf("请输入一个数:");
scanf_s("%d", &key);
int index = BinaryFind(ar, 10, key);
if (index == -1)
printf("查无此数\n");
else
printf("index=%d\n",index);
}