C语言二分法查询

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");
	}
}
发布了12 篇原创文章 · 获赞 9 · 访问量 542

猜你喜欢

转载自blog.csdn.net/weixin_45219512/article/details/105257447