二分查找

#include <stdio.h>
#include <string.h>

//Binary Search

//递归版
int rBinarySearch(int a[],int left,int right,int k) {
    if(a==NULL) {
        printf("请检查输入!\n");
        return -1;
    }
    //检查left和right的合法性
    if(left<right) {
        return -1;
    }

    int middle = (left+right)/2;
    if(a[middle] > k)
        return binarySearch(a,0,middle-1,k);
    else if(a[middle] < k)
        return binarySearch(a,middle+1,right,k);
    else
        return middle;
}

//非递归版
int binarySearch(int a[],int n,int k) {
    if(a==NULL) return -1;
    if(n<=0) return -2;
    int left=0,right=n-1;
    int middle = (left+right)/2;
    while(left<=right) {
        if(a[middle]>k) {
            right = middle-1;
        }
        else if(a[middle] < k) {
            left = middle+1;
        }
        else {
            return middle;
        }
        middle=(left+right)/2;
    }
    if(left > right)
        return -1;
}

void main() {
    int a[8]={1,2,3,4,5,6,7,8};
    //printf("%d",binarySearch(a,0,7,2));
    printf("%d",binarySearch(a,8,9));
}

 

posted @ 2014-06-05 10:31  枫睿  阅读(156)  评论(0)    收藏  举报