折半查法(C语言实现)递归

折半查法(C语⾔实现)递归
⼆分查(⼜称为折半查)是在有序序列中查⽐较多的查算法,基本思路:设有⼀个从⼩到⼤的序列,取中间的元素m进⾏⽐较,如果等于需要查的元素x则返回元素m的下标,若x⼤于m则再从右边的区间查,若x⼩于m则再从左边的区间查,这样每次减少⼀半的查范围。时间复杂度为O(lgn),查速度相对顺序查要快很多,但是查的数据序列必须是有序序列(即数据是从⼩到⼤或从⼤到⼩排序的).
第⼀种⽅法
//折半查的先决条件是查表中的数据元素必须有序
一个直立的火柴盒
#include <stdio.h>
#define N 5
int main()
{
int a[N],i,mid,low=0,high=N-1,num;
for(i=0;i<N;i++)
性和谐scanf("%d",&a[i]);
scanf("%d",&num);
while(low<=high)tm network
{
mid=(low+high)/2;
if(a[mid]==num)
{
printf("%d已到,第%d个元素",num,mid+1);
break;
闽江学院爱恩实达学院}
else if(a[mid]<num)
low=mid+1;
else2008tv
high=mid-1;
}
if(low>high)
printf("未到该数");
return 0;
}
第⼆种⽅法(递归)
#include <stdio.h>
#define N 5
int BinSerch(int s[],int low,int high,int num)
{
int mid;
if(low>high)
return -1;
else
{
mid=(low+high)/2;
if(s[mid]==num)
return mid;
else if(s[mid]<num)
return BinSerch(s,mid+1,high,num);
else
return BinSerch(s,low,mid-1,num);
}
}
int main()
{
int a[N],i,num,result;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
大鼠
printf("请输⼊要查的数:\n");
scanf("%d",&num);
result=BinSerch(a,0,N-1,num);
if(-1!=result)
printf("%d存在,为第%d个元素",num,result+1);    else
printf("查失败");
return 0;
}

本文发布于:2024-09-21 21:52:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/397740.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查找   元素   数据   序列   学院   有序   折半   递归
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议