输入一组有序数据,使用折半查找法插入一个数据,返回要插入数据的位置
#include <stdio.h>
int insertItemLoc(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 + 1;
}
}
// 下面是查找不到的情况
return low;
}
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 = insertItemLoc(a, 10, 18);
printf("loc = %d\n", loc);
return 0;
}
效果图: