二分法查找的循环实现与递归实现
二分法查找,就是在一列按顺序排列的数中查找某个数,以下是C++循环实现与递归实现
#include <iostream> using namespace std; int findit(int a[],int b); int main() { int a[100]; int b; int c; for(int i=0;i<100;i++) { a[i]=i; } cin>>b; c = findit(a,b); cout << c << endl; return 0; } int findit(int a[],int b) { int begin = 0; int end = 99; int mid = 0; while(begin<=end) { mid = (begin+end)/2; if(a[mid]==b) { return mid; } else if(a[mid]>b) end = mid-1; else begin=mid+1; } return -1; }
循环实现
#include <iostream> using namespace std; int findit(int a[],int b); int findit2 (int a[],int b,int begin,int end); int main() { int a[100]; int b; int c; for(int i=0;i<100;i++) { a[i]=i; } cin>>b; c=findit2(a,b,0,99); //c = findit(a,b); cout << c << endl; return 0; } int findit2 (int a[],int b,int begin,int end) { int mid = (begin+end)/2; if(begin>end) return -1; else if(a[mid]==b) return mid; else if(a[mid]>b) findit2(a,b,begin,mid-1); else findit2(a,b,mid+1,end); }
递归实现
此处,递归实现要比循环实现耗时间,也更耗空间,计算机处理递归的能力相对较低。