首页 > 代码库 > 二分查找*递归*与*非递归
二分查找*递归*与*非递归
二分查找感觉还是挺简单的,我写的这程序是处理有序表的查找,主要思想是这么回事:
已知元素个数,找到位于中间元素的值a[mid],并与要找的value比较,如果大于,那么就从0到mid-1中继续查找。
要考虑的问题,如果元素个数为0,数组中没有要查找的元素,还有找到元素怎么返回。
#include<cstdio>#include<algorithm>#include<iostream>using namespace std;#define MAX 1000int cos;void find(int a[],int v,int l,int r){ if(l>r) { cos=-1; return; } int mid=(l+r)/2; if(a[mid]>v) find(a,v,l,mid-1); else if(a[mid]<v) find(a,v,mid+1,r); else cos=mid; return ;}void find(int a[],int n,int v){ if(n==0) { cos=-1; return; } int l=0,r=n-1; cos=-1; while(l<=r) { int mid=(l+r)/2; if(a[mid]>v) r=mid-1; else if(a[mid]<v) l=mid+1; else { cos=mid; break; } } return ;}int main(){ int a[MAX]; int n,v; printf("输入元素个数:\n"); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } printf("输入查找元素\n"); scanf("%d",&v); //find(a,v,0,n); find(a,n,v); if(cos==-1) printf("没有元素\n"); else { printf("元素下表:%d\n",cos); } system("pause");}
二分查找*递归*与*非递归
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。