二分查找
注意事项:
- 二分查找只能用于有序元素列表
- 时间复杂度为 O(logn)
#include <stdio.h>
int binarySearch(int[], int, int);
int main(){
int myList[]={1, 3, 5, 7, 9};
int len = sizeof(myList) / sizeof(myList[0]); //len的值为5, myList字节长度为20, 其中 myList[0]字节长度为4, 故而可得len值
printf("%d\n", binarySearch(myList, 9, len));
printf("%d\n", binarySearch(myList, 12, len));
return 0;
}
int binarySearch(int list[], int item, int len){
int low = 0;
int high = len-1;
while(low<=high){
int mid = (low+high)/2;
int guess = list[mid];
if(guess < item){
low = mid +1;
}
else if(guess > item){
high = mid -1;
}
else{
return mid + 1;
}
}
return -1;
}
sizeof的用法:
sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。所以, 这个myList数组, 它的字节长度就为20, 返回的是这个大小, 后面就需要除其中一个数所占的位置, 即可得出有多少个数在里面, 即数组长度high 所指向的数组位置需要减一个一 :
high的真实位置是第五个, 对应数组myList[4]...