C语言实现二分法查找数组里的数
递归以及非递归方法
非递归查找
#include <stdio.h>
#include <stdlib.h>
//非递归算法
int Bin_Search(int *arr,int length,int find)
{
int first = 0,last = length-1,mid;
int sum = 0;
while(first <= last)
{
sum ++;
mid = (first + last)/2;//确定中间元素
if(arr[mid] > find) //寻找数在前面
{
last = mid-1;
}
else if(arr[mid] < find)//寻找数在后面
{
first = mid+1;
}
else //判断是否相等
{
printf("查找次数:%d\n",sum);
return mid;
}
}
printf("查找次数:%d\n",sum);
return -1;
}
递归查找
//递归算法
int bin_Search(int *arr,int find,int high,int low){
if(low<=high){
int mid=(high+low)/2;
if(arr[mid] > find){
return bin_Search(arr,find,mid-1,low);
}
if(arr[mid] < find){
return bin_Search(arr,find,high,mid+1);
}
else return mid;
}
return -1;
}
主函数
void main(void)
{
int find,a=0;
int arr[10] = {1,2,3,4,5,6,7,8,10};
printf("1是递归,2是非递归:\n");
scanf("%d",&a);
switch(a){
case 1:
printf("递归,请输入您要查找的数字:\n");
scanf("%d",&find);
int found=bin_Search(arr,find,9,0);
if(found==-1){
printf("无该数字!!\n");
}
else {
printf("这个数在数组的位置:%d",found);
}
break;
case 2:
printf("非递归,请输入您要查找的数字:\n");
scanf("%d",&find);
int site = Bin_Search(arr,10,find);
if(site!=-1) {
printf("数字在数组的位置:%d\n",site);
}
else printf("无该数字!!\n");
}
}