折半查找/二分查找
算法复杂度O(logn)
算法设计
算法实现
#include<stdio.h>
#define MAX_N 100
//实现单调递增 数组arr中查询数字x是否存在
//数组长度为n,如果找到了,返回x所在数组下标,否则返回1
int binary_search(int *arr, int x, int n){
int min = 0;
int max = n-1;
int mid;
while(min <= max){
//或 mid = (min + max) >> 1;
mid = (min + max) / 2;
if(arr[mid] == x){
return mid;
}else if(arr[mid] > x){
max = mid - 1;
}else{
min = mid + 1;
}
}
return -1;
}
int main(){
int arr[MAX_N + 5] = {0};
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++){
//arr+i 可以替换为 &arr[i]
scanf("%d", arr+i);
}
int x;
while(~scanf("%d", &x)){
printf("search %d from array:%d\n", x, binary_search(arr, x, n));
}
return 0;
}