二分查找

作者: 谢小帅 | 来源:发表于2017-08-04 13:46 被阅读0次
  • 建立在数组有序的基础上
  • key 与 a[mid] 比较来限界
  • 查找过程可以细分为四种情况
    • 在范围外,查找不到
    • 特殊情况,边界值
    • 一般情况,中间值
    • 在范围内,查找不到
#include <iostream>

using namespace std;

// 二分查找
int binarySearch(const int *a, int key, int low, int high) {
    // 在范围外,查找不到
    if (key < a[low] || key > a[high]) return -1;

    // 特殊情况,边界值
    if (key == a[high]) return high;
    if (key == a[low]) return low;

    // 一般情况,中间值
    while (low <= high) { // while中这一关系可能改变,改变说明找不到
        int mid = (low + high) / 2;
        if (key > a[mid]) low = mid + 1;
        else if (key < a[mid]) high = mid - 1;
        else return mid;
    }

    return -1; // 在范围内,查找不到
}

void printArray(const int *a, int len) {
    for (int i = 0; i < len; ++i) {
        cout << a[i] << " ";
    }
    cout << endl;
}

int main() {
    int a[10] = {0, 16, 24, 35, 47, 59, 62, 73, 88, 99};
    printArray(a, 10);
    cout << "查找:";
    int key;
    cin >> key;
    cout << "位置:" << binarySearch(a, key, 0, 9);
    return 0;
}
0 16 24 35 47 59 62 73 88 99 
查找:24
位置:2

相关文章

网友评论

    本文标题:二分查找

    本文链接:https://www.haomeiwen.com/subject/wnmvlxtx.html