题目:给一个排序好的整数数组A(升序),
请写一个函数,输入是数组A和一个整数key,返回数组A中值小于key的最大元素的索引值。
分析:因为有序,故可以使用折半查找的思想,但是需要变通实现。
实现如下:
#include <stdio.h>
int modifiedBinarySearch(int list[], int len, int key);
int main(int argc, char *argv[]) {
int a[10];
int i;
int len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len; ++i) {
a[i] = i;
}
for(i = 0; i < len + 10; ++i) {
printf("index = %d for key = %d \n", modifiedBinarySearch(a, len, i), i);
}
return 0;
}
int modifiedBinarySearch(int list[], int len, int key) {
int low = 0;
int high = len - 1;
int mid = low + ( (high - low) >> 1);
while(low < high) {
mid = low + ( (high - low) >> 1);
if(list[mid] > key) {
high = mid -1;
} else if(list[mid] < key) {
low = mid + 1;
} else {
break;
}
}
if(list[mid] >= key) {
while(mid >= 0 && list[mid] >= key) --mid;
return mid;
}
if(list[mid] < key) {
while(mid < len && list[mid] < key ) ++mid;
return --mid;
}
}