二分查找法

来源:互联网 发布:微信里数据指的是什么 编辑:程序博客网 时间:2024/06/16 04:13

方法一:非递归的方法

#include<stdio.h>#include<stdlib.h>int binary_s(int a[], int len, int k){    int low = 0;    int high = len - 1;    while (low <= high)    {        int mid = (low + high) / 2;        if (k == a[mid])            return mid;        else if (k>a[mid])            low = mid + 1;        else            high = mid - 1;    }    return -1;}int main(){    int a[10] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };    int len = sizeof(a) / sizeof(int);    int index;    index = binary_s(a, len, 6);    printf("index=%d", index);    system("pause");    return 0;}

方法二:递归的方法

#include<stdio.h>#include<stdlib.h>int binary_s(int a[], int value, int low, int high){    if (low > high)        return -1;    int mid = (low + high) / 2;    if (value == a[mid])        return mid;    else if (value > a[mid])        return binary_s(a, value, mid + 1, high);    else        return binary_s(a, value, low, mid - 1);}int binary_search(int a[], int len, int value){    if (a == NULL || len <= 0)        return -1;    int low = 0;    int high = len - 1;    int index;    index=binary_s(a, value, low, high);    return index;}int main(){    int a[10] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };    int len = sizeof(a) / sizeof(int);    int index;    index = binary_search(a, len, 11);    printf("index=%d", index);    system("pause");    return 0;}

时间复杂度:O(logn),最坏的情况下为O(n)

参考:
http://www.cnblogs.com/shuaiwhu/archive/2011/04/15/2065062.html
http://www.cnblogs.com/xwdreamer/archive/2012/05/07/2487246.html
http://blog.csdn.net/frances_han/article/details/6458067

0 0
原创粉丝点击