#include "stdafx.h" #include <iostream> using namespace std; int BinSearch_1(int arr[], int low, int high, int target); int BinSearch_2(int arr[], int n, int target); int main() { int arr[10]; for (int i=0; i<10; i++) { arr[i] = i + 1; } int index = BinSearch_1(arr, 0, 10, 5); if (index != -1) { cout<<"Find "<<arr[index]<<endl; } else { cout<<"Not Find!"<<endl; } int index2 = BinSearch_2(arr, 10, 61); if (index2 != -1) { cout<<"Find "<<arr[index2]<<endl; } else { cout<<"Not find!"<<endl; } } //函数功能:二分查找递归实现,arr为输出数组,low,high分别为数组元素的上限和下限,target为查找目标 //返回值:-1表示未找到,若找到,返回target在数组中的位置 int BinSearch_1(int arr[], int low, int high, int target) { if (low > high) { return -1; } int middle = (low + high) / 2; if (arr[middle] == target) { return middle; } else if (arr[middle] > target) { return BinSearch_1(arr, low, middle-1, target); } else { return BinSearch_1(arr, middle+1, high, target); } } //函数功能:二分查找的非递归版本 int BinSearch_2(int arr[], int n, int target) { int low = 0; int high = n; while (low < high) { int middle = (low + high) / 2; if (arr[middle] < target) { low = middle + 1; } else if (arr[middle] > target) { high = middle - 1; } else { return middle;//找到 } } return -1;//未找到,返回-1 }