二分搜索技术

来源:互联网 发布:淘宝售后时限 编辑:程序博客网 时间:2024/05/21 10:07

问题描述

给定已排好序的n个元素a[0:n-1],现要在这个n个元素中找到一个特定元素x。

算法思想

利用元素间的次序关系,采用分治策略,可在最坏情况下用O(logn)时间完成搜索任务。
将n个元素分成个数大致相同的两半,取a[n/2]与x做比较。
如果x = a[n/2],则找到x,算法终止;
如果x < a[n/2],则只要在数组a的左半部继续搜索x;
如果x > a[n/2],则只要在数组a的右半部继续搜索x。

template< class Type>int BinarySearch(Type a[],const Type& x, int n){    int left =0;int 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;}

每执行一次算法的while循环,待搜索数组的大小减小一半。因此,在最坏情况下,while循环被执行了O(logn)次。

原创粉丝点击