这个是个基本的查找算法,因为只是把数读入就需要(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; }
这里面没什么原理。。问题很简单~