折半查找

来源:互联网 发布:阿里云dns解析 a记录 编辑:程序博客网 时间:2024/05/29 07:19

1.递归实现

#include<iostream>using namespace std;int find(int *a, int low, int high, int x){    if (low > high)        return -1;    int mid = (low + high) / 2;    if (a[mid] == x)        return mid;    if (x < a[mid])        return find(a, low, mid-1, x);    else        return find(a, mid+1, high, x);}int binary_Search(int *a, int length, int x){    return find(a, 0, length - 1, x);}int main(){    int a[] = { 0,1, 2, 3, 4, 5, 6, 7, 8 };    cout << binary_Search(a, 9, -1);}

2非递归

#include<iostream>using namespace std;int binary_Search(int *a, int length, int x){    int low = 0, high = length - 1;    int mid;    while (low <= high){        mid = (low + high) / 2;        if (x == a[mid])            return mid;        if (x < a[mid])            high = mid - 1;        if (x>a[mid])            low = mid + 1;    }    return -1;}int main(){    int a[] = { 0,1, 2, 3, 4, 5, 6, 7, 8 };    cout << binary_Search(a, 9, 8);}
原创粉丝点击