在一个有序数组中查找某个具体的数字n
折半查找算法(二分查找算法)
在main函数中实现
#include <stdio.h>
int main(int argc, const char * argv[]) {
int array[] = {1,2,3,4,5,6,7,8,9,10};
int k = 0;
scanf("%d",&k);
int flag = 0;
int left = 0;
int right = sizeof(array) / sizeof(array[0]) -1 ; //求一个数组的长度
int mid = 0;
while (left <= right) { //没找到跳出循环的条件
mid = (left + right)/2;
if(array[mid] == k){
printf("找到了,下标是%d\n",mid);
flag = 1;
break; //找到了跳出循环
}else if(array[mid] < k){
left = mid + 1;
}else{
right = mid - 1;
}
}
if(flag == 0)
printf("没找到\n"); //没找到
return 0;
}
使用函数封装
int binary_search(int arr[],int k,int sz){
int left = 0;
int right = sz;
while(left <= right){
int mid = (left + right)/2;
if(arr[mid] < k){
left = mid + 1;
}else if(arr[mid] > k){
right = mid - 1;
}else{
return mid;
}
return -1;
}
//找到则返回下标,没找到返回-1