二分查找递归和非递归实现(c语言实现)
来源:互联网 发布:刷话题软件 编辑:程序博客网 时间:2024/05/16 10:46
#include<stdio.h>++
int seeqSearch(int a[],int n,int k){
int i=n-1;
for(;i>=0;i--){//遍历数组
if(a[i]==k){//找到对应的数组
return i;//返回该数组的下标
}
}
return -1;//失败返回值为-1
}
int binSearch(int a[],int n,int k){
int mid,hig,low;//定义指向中间高位和low的元素
hig=n-1;//为高位指针赋初值
low=0;//地位赋初值
while(low<=hig){//到low大于hig时代表未找到退出循环
mid=(hig+low)/2;//为mid赋值
if(a[mid]==k){
return mid;//当找到到的时候返回该数的下标
}
else if(a[mid]>k){//如果当前的数的值大于k
hig=mid-1;//当前的mid-1赋值给hig
}
else if(a[mid]<k){//如果当前的数的值小于k
low=mid+1;//当前的mid+1赋值给low
}
}
return -1;//失败返回-1
}
int binSearch2(int a[],int low,int hig,int k){//此方法为递归算法
int mid;//定义指向中间的指针
if(low>hig){
return -1;
}else{
mid=(hig+low)/2;//为mid赋值
if(a[mid]==k){
return mid;//当找到到的时候返回该数的下标
}
else if(a[mid]>k){//如果当前的数的值大于k
binSearch2(a,low,mid-1,k);//调用递归算法
}
else if(a[mid]<k){//如果当前的数的值小于k
binSearch2(a,mid+1,hig,k);//调用递归算法
}
}
}
int main(){
int a[10001];//定义一个数组用来存放元素
int n,i=0;//定义一个存放个数和计数器
printf("请输入你要输入的元素的个数:");
scanf("%d",&n);
while(n--){
printf("\n这是你要存入的第%d个元素:\n",i+1);
scanf("%d",&a[i]);
i++;
}
n=i;
printf("请输入你要查找的元素的数值:\n");
int k;
scanf("%d",&k);
i=seeqSearch(a,n,k);//首先是进行顺序查找得到下标
if(i==-1){//当返回值为-1代表没有查到
printf("你拨打的用户不在服务器,请稍后在拨!!!\n");
return 0;
}
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
i=binSearch(a,n,k);//其次是进行二分查找得到下标
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
i=binSearch2(a,0,n-1,k);//递归算法
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
return 0;
}
int seeqSearch(int a[],int n,int k){
int i=n-1;
for(;i>=0;i--){//遍历数组
if(a[i]==k){//找到对应的数组
return i;//返回该数组的下标
}
}
return -1;//失败返回值为-1
}
int binSearch(int a[],int n,int k){
int mid,hig,low;//定义指向中间高位和low的元素
hig=n-1;//为高位指针赋初值
low=0;//地位赋初值
while(low<=hig){//到low大于hig时代表未找到退出循环
mid=(hig+low)/2;//为mid赋值
if(a[mid]==k){
return mid;//当找到到的时候返回该数的下标
}
else if(a[mid]>k){//如果当前的数的值大于k
hig=mid-1;//当前的mid-1赋值给hig
}
else if(a[mid]<k){//如果当前的数的值小于k
low=mid+1;//当前的mid+1赋值给low
}
}
return -1;//失败返回-1
}
int binSearch2(int a[],int low,int hig,int k){//此方法为递归算法
int mid;//定义指向中间的指针
if(low>hig){
return -1;
}else{
mid=(hig+low)/2;//为mid赋值
if(a[mid]==k){
return mid;//当找到到的时候返回该数的下标
}
else if(a[mid]>k){//如果当前的数的值大于k
binSearch2(a,low,mid-1,k);//调用递归算法
}
else if(a[mid]<k){//如果当前的数的值小于k
binSearch2(a,mid+1,hig,k);//调用递归算法
}
}
}
int main(){
int a[10001];//定义一个数组用来存放元素
int n,i=0;//定义一个存放个数和计数器
printf("请输入你要输入的元素的个数:");
scanf("%d",&n);
while(n--){
printf("\n这是你要存入的第%d个元素:\n",i+1);
scanf("%d",&a[i]);
i++;
}
n=i;
printf("请输入你要查找的元素的数值:\n");
int k;
scanf("%d",&k);
i=seeqSearch(a,n,k);//首先是进行顺序查找得到下标
if(i==-1){//当返回值为-1代表没有查到
printf("你拨打的用户不在服务器,请稍后在拨!!!\n");
return 0;
}
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
i=binSearch(a,n,k);//其次是进行二分查找得到下标
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
i=binSearch2(a,0,n-1,k);//递归算法
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
return 0;
}
阅读全文
0 0
- C语言:递归和非递归实现二分查找
- 二分查找算法递归和非递归实现(C++)
- 二分查找递归和非递归实现(c语言实现)
- c语言简单递归/非递归实现二分查找
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 递归和非递归实现二分查找
- 二分查找(非递归实现和递归实现)
- c++二分查找实现(非递归和递归方式)
- 二分查找递归和非递归(java实现)
- 二分查找法(递归和非递归实现)
- c++二分查找实现(非递归和递归方式)
- c语言利用递归实现二分查找
- C语言 ---- 递归实现二分查找
- 使用c语言指针和递归方法实现二分查找
- 二分查找递归与非递归实现
- win10使用进阶:一周年更新14316如何开启Linux Bash命令行
- jsp/servlet中链接中出现中文乱码问题的解决办法及个人见解
- 收藏的URL
- nyoj 34 韩信点兵
- Linux 实时查看MQ中间件运行状态
- 二分查找递归和非递归实现(c语言实现)
- hadoop HA 过程
- python传到前端的数据,双引号被转义
- A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
- 安卓设计模式,工厂模式/单例模式/观察者模式/代理模式/
- PHPExcel插件工具
- 监听器--监听session创建后计数(servletContext)
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- malloc(0)