我是靠谱客的博主 酷炫导师,最近开发中收集的这篇文章主要介绍笔试之循环递增数组查找,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题:对已排好序的数组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;
}


最后

以上就是酷炫导师为你收集整理的笔试之循环递增数组查找的全部内容,希望文章能够帮你解决笔试之循环递增数组查找所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部