折半查找

来源:互联网 发布:mysql bin.000004 编辑:程序博客网 时间:2024/06/06 16:51
/**折半查找:要求表顺序存储和元素关键字有序排列,适用于表不易变动且需频繁查找的情况。查找过程可以用一棵二叉树表示 实质是根据现有条件,不同的思路来剪枝,最终的效果是访问的事物少了 */ #include<iostream>using namespace std;//返回查找元素data的下标int find(int *a,int l,int r,int data) {while(l<=r) {int mid=(l+r)/2;if(a[mid]==data) {return mid;} else if(data>a[mid]) {l=mid+1;} else {r=mid-1;}}return -1;}//递归写法 int find_rec(int *a,int l,int r,int data){if(l>r)return -1;int mid=(l+r)/2;if(data==a[mid]){return mid;}else if(data<a[mid]){find_rec(a,l,mid-1,data);}else{find_rec(a,mid+1,r,data);}}int main() {int a[10]= {1,2,3,3,5,6,7,8,9,10};int index1=find(a,0,9,2);printf("index1=%d\n",index1);int index2=find_rec(a,0,9,2);printf("index2=%d\n",index2);return 0;}

原创粉丝点击