输入一组有序数据,使用折半查找法查找一个数据,并输出位置
#include <stdio.h>
/**
* 使用折半查找,来查找一个数
*
* @param arr 数组
* @param len 数组的长度
* @param key 要查找的数
*
* @return 要查找的数的位置,如果查找不到返回 -1
*/
int searchItem(int arr[], int len, int key)
{
// 定义变量
int low = 0, high = len - 1, mid;
// 循环
while (low <= high) {
// 计算mid的位置
mid = (low + high) / 2;
// 判断 key a[mid]
if (key > arr[mid]) {
// key > a[mid] low = mid + 1
low = mid + 1;
}else if (key < arr[mid]){
// key < a[mid] high = mid - 1
high = mid - 1;
}else{
// key == a[mid]
return mid;
}
}
// 下面是查找不到的情况
return -1;
}
int main(int argc, const char * argv[]) {
int a[10] = {3,4,12,20,21,23,28,45,67,100};
// 查找20 key = 20
int loc = searchItem(a, 10, 20);
printf("loc = %d\n", loc);
return 0;
}
效果图: