程序功能:
在一个有序数组里,查到某个数字,若找到输出该数字下标,找不到输出“No found!”。
设计思想:
要查找的数与中间的数组元素进行比较,根据大小比较结果确定要在哪个范围内继续查找,重复若干次直到查到或没有查到。
完整代码:
#include<stdio.h>
int SearchNumber(int arr[], int k,int sz)
{
int left = 0;
int right = sz - 1;
while (left<=right)
{
int mid = (left + right) / 2; //求中间元素的下标
if (arr[mid] < k)
left = mid + 1; //更新左下标
else if (arr[mid] > k)
right = mid - 1; //更新右下标
else
return mid; //找到了,传回下标
}
return -1; //只有找不到了,才会传-1
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int key = 0;
int location = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //求数组大小
location = SearchNumber(arr, key,sz); //传递首元素的地址
if (location >= 0)
printf("Location is %d\n", location);
else
printf("No found!\n");
return 0;
}
收获和感想:
二分查找可以大大提高有序数组查找效率。
1.求数组大小是用sizeof()函数。
2.数组传参是传递的是数组首元素的地址,所以求数组大小只能在主函数里求,然后传参给SearchNumber()函数。