二分查找感觉还是挺简单的,我写的这程序是处理有序表的查找,主要思想是这么回事:
已知元素个数,找到位于中间元素的值a[mid],并与要找的value比较,如果大于,那么就从0到mid-1中继续查找。
要考虑的问题,如果元素个数为0,数组中没有要查找的元素,还有找到元素怎么返回。
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; #define MAX 1000 int 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"); }
时间: 2024-10-26 18:49:08