首页 > 代码库 > 算法-对分查找(二分查找)C++实现

算法-对分查找(二分查找)C++实现

这个是个基本的查找算法,因为只是把数读入就需要(N)的时间量,因此我们在说这类问题的时候都是假设读入过的。

在算法常用的时间,将问题缩小为一部分(大约1/2),那么我们就认为这个算法是O(logn)级别的。


先说下对分查找的时间复杂度为O(logn)

前提是已经拍序好的数列。


//
//  main.cpp
//  binarySearch
//
//  Created by Alps on 14-7-24.
//  Copyright (c) 2014年 chen. All rights reserved.
//

#include <iostream>

int binarySearch(const int A[], int X, int N){
    int start = 0, end = 0, mid;
    end = N;
    while (start <= end) {
        mid = (start + end)/2;
        if (X > A[mid]) {
            start = mid+1;
            continue;
        }else if (X < A[mid]){
            end = mid-1;
            continue;
        }else{
            return mid;
        }
    }
    return -1;
}

int main(int argc, const char * argv[])
{
    int A[]={1 ,4 , 6, 8, 19, 34, 93};
    int N = sizeof(A)/sizeof(int);
    int X = 19;
    
    int locate = binarySearch(A, X, N);
    if (locate == -1) {
        printf("Can't find the element %d\n",X);
    }else{
        printf("The element %d is locate in %d\n",X,locate);
    }
    
    return 0;
}

这里面没什么原理。。问题很简单~ 

算法-对分查找(二分查找)C++实现