二分搜索算法
题目描述
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。
题目分析
二分搜索算法(折半查找法)是运用分治策略的典型例子。
满足分治法的4个适用条件。很显然此问题分解出的子问题相互独立,即在a[i]的前面或后面查找x是独立的子问题,因此满足分治法的第四个适用条件。
算法实现
#include <stdio.h> int binarySearch(int a[], const int& x, int n) { int left=0, right=n-1; while (left <= right) { int middle = (left+right)/2; if (x==a[middle]) { return middle; } if (x > a[middle]) { left = middle+1; } else { right = middle-1; } } return -1; } int main() { int a[] = {1,2,5,7,8,10}; printf("%d\n",binarySearch(a,8,6)); return 0; }
复杂度分析
每执行一次算法的while循环, 待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn) 次。循环体内运算需要O(1) 时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn) 。