實現思路:ios
一、從數組的中間開始尋找,若是中間的數據小於要尋找的目標則從中間往右邊尋找,繼續是從右邊的中間開始。數組
二、從數組的中間開始尋找,若是中間的數據大於要尋找的目標則從中間往左邊尋找,繼續是從左邊的中間開始。spa
前提:在使用二分查找的時候數組是用先排序好的,遞增和遞減均可以。code
具體代碼以下:blog
#include <iostream> using namespace std; /*********************************************************** * 非遞歸實現二分查找 * @參數 * @source:要查找的目標數組 * @low:數組的最小的下標 * @high:數組的最大的下標 * @target:要查找的目標 * *********************************************************/ int bisect_serach(int *source,int low,int high,int target) { int mid = 0; while(low <= high) { mid = (low+high)/2; if(source[mid]>target) { high = mid-1; } else if(source[mid]<target) { low = mid+1; } else if(source[mid]==target) return mid; } return -1; //沒有找到 } /*********************************************************** * 遞歸實現二分查找 * @參數 * @source:要查找的目標數組 * @low:數組的最小的下標 * @high:數組的最大的下標 * @target:要查找的目標 * *********************************************************/ int bisect_serach_rec(int *source,int low,int high,int target) { int mid = 0; mid = (low+high)/2; if (low > high) return -1; //沒有找到 else if(source[mid]>target) { bisect_serach_rec(source,low,mid-1,target); } else if(source[mid]<target) { bisect_serach_rec(source,mid+1,high,target); } else if(source[mid]==target) return mid; } int main() { int i = 0; int position; int *source = new int[10]; for(i=0;i<10;i++) source[i] = i; position = bisect_serach(source,0,9,22); if(position == -1) { cout<<"not found the data"<<endl; } cout<<position<<endl; delete []source; return 0; }