笔试之循环递增数组查找

来源:互联网 发布:电脑病毒 变更mac地址 编辑:程序博客网 时间:2024/05/16 11:27

问题:对已排好序的数组A,一般来说可用二分查找 可以很快找到。现有一特殊数组A[],它是循环递增的,如A[]={ 17 19 20 25 1 4 7 9},试在这样的数组中找一元素x,看看是否存在。

思路:同样用二分查找,每次用待查找元素x与中间元素比较,如果大于中间元素,则left=middle+1,如果小于中间元素,需比较x与左边元素的大小,如果大于左边元素,则right=middle-1,否则left=middle+1。

int findx(int *a, int len, int key){    int left, right, middle;    left = 0; right = len - 1;    while(left <= right)    {        middle = (left + right) / 2;        if(key > a[middle])        {            left = middle + 1;        }        else if(key < a[middle])        {            if(key < a[left])            {                left = middle + 1;            }            else            {                right = middle -  1;            }        }        else            return 1;    }    return 0;}


0 0
原创粉丝点击