实现一个整形有序数组的二分查找
#include<stdio.h>
int search(int a[], int k, int s) { //调用函数
int left = 0; //左下标
int right = s - 1; //右下标,元素下标0-9,元素个数 - 1=最右下标
while (left <= right) {
int mid = (left + right) / 2; //中间的数
if (a[mid] > k) {
right = mid - 1;
} else if (a[mid] < k)
{
left = mid + 1;
}else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int key = 7;
int sz = sizeof(arr) / sizeof(arr[0]); // 数组的总大小/1个元素的大小=几个元素 int ret = search(arr, key, sz);
if(-1 == ret) //找不到返回-1,因为下表是从0开始的
{
printf("找不到\n");
}else
{
printf("找到了\,下标是:%d\n",ret);
}
return 0;
}