二分查找

//C语言 
int binarySearch(int *arr,int len,int key) {
    if(arr == NULL || len <= 0)
    return -1;
    int start = 0;
    int end = len - 1;
    int mid = 0;
    while(start < end) {
        if(arr[start] == key)
        return start;
        if(arr[end] == key)
        return end;
        mid = start + (end - start) / 2;
        if(arr[mid] == key)
        return mid;
        else if(arr[mid] < key)
        start = mid+1;//必须+1,否则死循环 
        else
        end = mid-1;//必须-1,否则死循环 
    }
    return -1;
}

 

//C++
const
size_t arraySize = 10; template<typename T> int binarySearch(const array<T, arraySize> &arr, const T &key) { int mid = 0; int low = 0; int high = arraySize - 1; while (low < high) { mid = low + (high - low); if (arr[low] == key) return low; if (arr[high] == key) return high; if (arr[mid] == key) return mid; if (arr[mid] < key) low = mid + 1; else high = mid - 1; } return -1; }

时间复杂度:O(log2N)

证明:

posted @ 2018-02-22 16:29  AFreeMan  阅读(119)  评论(0编辑  收藏  举报