码迷,mamicode.com
首页 > 其他好文 > 详细

有序环形数列的查找问题

时间:2015-03-05 12:29:25      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

问题:有一个有序的环形数列,从小到大排好了,比如4, 5, 6, 1, 2, 3,从第四个位置开始当成环形看,就是一个有序数列1, 2, 3, 4, 5, 6。问题是在这个数列重找到给定的关键字。

看到有序,自然想到binary search。这个问题可以用binary search做,每次二分,把数组分成两部分,一部分是普通的有序数列,一部分是原问题。

代码如下:

bool search(int arr[], int b, int e, int k)
{
    if (!arr || b < e || b < 0)
        return false;

    int s = b + (e - b)/2;
    if (arr[s] == k)
        return true;
    else if (arr[s] > k)
    {
        if (arr[s] > arr[b])
        {
             if (k >= arr[b])
                return bsearch(arr, b, s-1, k);
            else
                return search(arr, s+1, e, k);
        }
        else
        {
            return search(arr, b, s-1, k);
        }
    }
    else
    {
        if (arr[s] > arr[b])
            return bsearch(arr, s+1, e, k);
        else
        {
            if (k >= arr[b])
                return search(arr, e, s-1, k);
            else
                return bsearch(arr, s+1, e, k);
        }
}

 

有序环形数列的查找问题

标签:

原文地址:http://www.cnblogs.com/litao-tech/p/4315204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!