二分搜索

#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值