C++資料結構4 二分查詢(遞迴方法)
阿新 • • 發佈:2018-12-13
二分查詢比順序查詢效率高很多
同樣的100萬個資料,順序查詢需要50萬次,而二分查詢需要20次左右既可以了。但是二分查詢需要的資料是已經排列好的,無序的資料則用不了二分查詢。
#include <iostream> /* 二分查詢:必須是已經排序好的數,有遞迴和迭代(迴圈)兩種方式,遞迴的效率比迭代的效率高得多 */ using namespace std; int BinarySearch_D(int *a,const int left,const int right,const int x) { if(left<=right) { int middle=(right+left)/2; //取中間 if(x<a[middle]) return BinarySearch_D(a,left,middle-1,x); //進行左邊遞迴 else if(x>a[middle]) return BinarySearch_D(a,middle+1,right,x); //進行右邊遞迴 else return middle; //找到 } return -1; } int BinarySearch_I(int *a,const int n, const int x) { int left=0,right=n-1; while(left<=right) { int middle=(right+left)/2; //取中間 if(x<a[middle]) right=middle-1; else if(x>a[middle]) left=middle+1; else return middle; //找到 } return -1; } int main() { int a[]={0,1,2,3,4,5,6,7,8,9}; int p=BinarySearch_D(a,0,9,7); cout<<"p的值:"<<p; //cout << "Hello world!" << endl; int y=BinarySearch_I(a,10, 7); cout<<"p的值"<<y; return 0; }