二分查找法

//通过二分查找法在一个已经排好序的数组查找值
#include<stdio.h>
//定义二分查找的函数(递归函数)
//基本思路:
//1.将被查值与数组中间值相比较
//2.被查值>中间值,在数组右边继续重复上述操作;被查值<中间值,在数组左边继续重复上述操作
//3.直到被查值与中间值相等,输出中间值
int two(int arr[],int left,int right,int scan){//参数分别为,数组、最左下标值、最右下标值(用于求出中间下标从而求出中间值)、被查值
	int middle;
	if(left>right){//该语句很重要,用于判断被查值找不到的情况。由于左右下标不断减小,如果数组中没有被查值则left最终一定小于right
		return -1;
	}
	middle = (left+right)/2;//中间值
	if(scan>arr[middle]){//判断被查值与中间值的大小
		two(arr,middle+1,right,scan);//被查值大,查找区域转移至右边
	}else if(scan<arr[middle]){//判断被查值与中间值的大小
		two(arr,left,middle-1,scan);//被查值大,查找区域转移至左边
	}else{
		return middle;//当被查值和中间值相等的时候,返回此时的中间值
	}
}

void main(){
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	int arrlen,scan,resualt;
	printf("请输入一个数:");
	scanf("%d",&scan);
	arrlen = sizeof(arr)/sizeof(int);//算出数组以元素为单位的大小(一劳永逸)
	resualt = two(arr,0,arrlen-1,scan);
	if(resualt==-1){
		printf("没有找到!\n");
	}else{
		printf("找到了:%d\n",resualt);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值