標籤:blog ar io os sp for div 問題 log
二分尋找感覺還是挺簡單的,我寫的這程式是處理有序表的尋找,主要思想是這麼回事:
已知元素個數,找到位於中間元素的值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");}
二分尋找*遞迴*與*非遞迴