二分法实战教学快速入门(折半查找法)

//二分查找法(折半查找法)
//主要思路:将一个顺序已经排好的数组如从小到大,
//分别取第一位和末位为low和high,取mid为两者位置数的平均值
//输入key,每次在循环中判断key与mid位置数组值大小关系
//若key<mid位置数组的值,则high位置数=mid-1,查找范围缩小一半,下次在[low,mid-1]间寻找
//若key>mid位置数组的值,则low位置数=mid+1,查找范围缩小一半,下次在[mid+1,high]间寻找
//重复上述步骤,不断将key值范围缩小,high和low的位置数逼近相等或十分接近 
#include<stdio.h>
int main()
{
 int key,mid,high,low;//先定义 key中文意思为答案,high为高位,low为低位 
 int a[10]={-22,-5,5,7,8,13,14,51,68,77};//随便定义了一些从小到大顺序的数组
 //二分法使用条件:数组一定是已经按小到大或大到小的顺序排好 
 printf("请输入要查找的数:");
 scanf("%d",&key);
 low=0;  high=9;  //查找区域初始化(在a[low]~a[high]内查找) 
 while(low<=high)  // 此处是 <= 而不是 < 。记住格式是一个大while里面包含了3个选择条件 
 { 
  mid=(high+low)/2; 
  if(key<a[mid])
  high=mid-1;
  else if(key>a[mid])
  low=mid+1;
  else break;         //如果等于中间位置的数据,则找到,结束查找。 
 }
 if(low<=high)              //找到 
 printf("%d在数组中的下标为%d\n",key,mid);
 else
 printf("查无此数");          //未找到 
 return 0; 
 } 
 
// 算法大概就是这样,希望读者认真背诵算法的代码,下次遇见直接套上用就OK 
//二分法能提高计算机的计算效率,减少计算次数,在处理大数据时十分有效 
int BinarySearch(int a[],int size,int p)
{//也可以写一个成子函数的形式,如果找到就放回该值,找不到返回1
	int l=0;
	int R=size-1;
	while(L<=R)
	{
		int mid=L+(R-L)/2;
		if(p==a[mid])
		return mid;
		else if(p>a[mid])
		{
			L=mid+1;
		}
		
		else 
		{
			R=mid-1;
		}
	}
	return -1;
}

 

如果喜欢我的文章,请关注我,点赞,谢谢,感谢读者。2021.11.26.  00:32

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值