#include <iostream> using namespace std; //二分查找:每次都从中间位置寻找,如果找到了就返回,如果没找到, //则分两种情况: //(1)中间元素比目标大,则继续往左边的那段二分查找 //(2)中间元素比目标小,则继续往右边的那段二分查找 //递归下去,一旦找到元素就停止递归返回目标所在位置;当left>right时跳出递归 //时间复杂度为O(logn) //还有一种查找算法就是顺序查找,就是从第一个元素到最后一个元素都遍历一遍,逐一跟目标比较是否相等 //二分查找-递归实现-要求序列已经从小到大排好序 int binary_search(int array[],int left,int right,int key) { if(left > right)//递归结束 return -1;//找不到 if(left == right) { if(array[left] == key) return left; else return -1;//找不到 } int mid = (left + right) / 2; if(array[mid] == key) return mid; else if(array[mid] > key) return binary_search(array,left,mid-1,key); else if(array[mid] < key) return binary_search(array,mid+1,right,key); } //非递归实现 //int binary_search(int array[],int left,int right,int key) //{ // int mid; // while(left <= right) // { // mid = (left + right) / 2; // if(array[mid] == key) // return mid; // else if(array[mid] > key) // right = mid - 1; // else if(array[mid] < key) // left = mid + 1; // } // return -1;//没找到返回-1 //} int main() { int array[6] = {1,2,3,4,5,6}; int position = binary_search(array,0,5,3); cout<<"4 locates on index "<<position<<endl; return 0; }