二分查找

来源:互联网 发布:为什么用 php curl 编辑:程序博客网 时间:2024/05/22 08:02

两种二分查找方法,分别为循环和递归,并且添加了简单的测试用例。

#pragma#include <iostream>using namespace std;//循环方法int BinarySearch(int vec[], int length, int key){    int left = 0, right = length - 1;    int mid;    while (left <= right)    {        mid = (left + right) / 2;        if (vec[mid] == key)            return mid;        else if (vec[mid] > key)            right = mid - 1;        else            left = mid + 1;    }    return -1;}// 递归方法int BinarySearch_recursive(int vec[], int left, int right, int key){    if (left > right)        return -1;    int mid = (right + left) / 2;    if (vec[mid] == key)        return mid;    else if (vec[mid] > key)        return BinarySearch_recursive(vec, left, mid - 1, key);    else        return BinarySearch_recursive(vec, mid + 1, right, key);}void BinarySearch_test(){    int a[] = { 1, 2, 3, 4, 5 };    // testcase: non-existing number with large value    cout << "large number" << endl;    cout << "Iterator: " << BinarySearch(a, 5, 6) << endl;    cout << "Recursive: " << BinarySearch_recursive(a, 0, 4, 6) << endl;    // testcase: non-existing number with small value    cout << "small number" << endl;    cout << "Iterator: " << BinarySearch(a, 5, -1) << endl;    cout << "Recursive: " << BinarySearch_recursive(a, 0, 4, -1) << endl;    // testcase: an existing number    cout << "an existing number" << endl;    cout << "Iterator: " << BinarySearch(a, 5, 3) << endl;    cout << "Recursive: " << BinarySearch_recursive(a, 0, 4, 3) << endl;}
2 0
原创粉丝点击