#include <stdlib.h>
#include <stdio.h>
/*二分查找函数binary_search*/
/*传参需要查找的元素key,输入的数组arr,输入的数组长度n*/
//分治法
int binary_search(int key, int arr[], int n) {
/*声明变量,左边界值left,右边界值right,
中间值mid,用于记录查找次数count,用于记录查找成功次数count1*/
int left, right, mid, count=0, count1=0;
/*左边界值从最左边下标为0的位置开始*/
left = 0;
/*右边界值从数组长度减1的位置开始,也就是最右边*/
right = n - 1;
/*在查找范围不为0的情况下,执行循环语句*/
while(left < right) {
count++; //记录查找的次数
mid = (left + right) / 2; //计算中间值的下标
if (key < arr[mid]) { //如果要查找的元素小于中间值
right = mid - 1; //确定左子表的范围
}
else if (key > arr[mid]) { //如果要查找的元素大于中间值
left = mid + 1; //确定右子表的范围
}
/*如果要查找的元素等于中间值元素*/
else if (key = arr[mid]) {
printf("查找成功!\n 查找了%d次,arr[%d]=%d", count, mid, key);
count1++; //记录查找成功的次数
break;
}
}
/*如果一次都没有查找成功*/
if (count1 = 0)
printf("查找失败!");
return 0;
}
/*主函数*/
int main() {
/*声明用于键盘输入的变量i,用于查找
的元素key,数组arr,数组长度n*/
int i, key, arr[100], n;
printf("请输入数组的长度:\n");
scanf("%d", &n);
printf("请输入数组的元素:\n");
for (i=0;i<n;i++) {
scanf("%d", &arr[i]);
}
printf("请输入你要查找的元素:\n");
scanf("%d", &key);
/*调用二分查找函数*/
binary_search(key, arr, n);
printf("查找完毕!\n");
return 0;
}