二分查找之应用篇

来源:互联网 发布:淘宝店铺海报图片 编辑:程序博客网 时间:2024/06/05 09:15

二分查找,又称折半查找。假设数组长度为N,则算法复杂度为O(log(n));

其优点是:比较次数少,查找速度快,平均性能好。

其缺点是:要求待查表为有序表,而且插入删除困难。

算法要求:必须采用顺序存储结构且关键字大小有序(升序、降序都可)。

算法原理:查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.


int search4(int array[], int n, int v){    int left, right, middle;    left = -1, right = n;    while (left + 1 != right)    {        middle = left + (right - left) / 2;        if (array[middle] < v)        {            left = middle;        }        else        {            right = middle;        }    }    if (right >= n || array[right] != v)    {        right = -1;    }    return right;}

一下是百度面试的一道题,其中可以应用到二分查找的思想。

题目:有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

算法实现的基本思路:
找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只有正数或负数的情况。



原创粉丝点击