算法題之有序數組被折斷後的查找

給出一個有序數組,假設其爲升序,隨機找到一個點,將這個點後面的序列移到數組前面,構成一個新的序列。數組

要求對這個新的數組進行查找,找不到返回-1,不然返回其在數組中的位置。blog

好比輸入數組[7,8,9,1,2,3,4,5,6]class

查找1,返回3;di

查找8,返回1;return

查找0,返回-1;search

 

int searchDisorderedArray(int a[], int key, int begin, int end)
{
    if(begin == end && a[begin] != key)
        return -1;

    int mid = (begin+end)/2;

    if(a[mid] == key)
        return mid;

    if(a[mid] > a[end])
    {
        if(key >= a[begin] && key <=a[mid])
            return searchDisorderedArray(a, key, begin, mid-1);
        else
            return searchDisorderedArray(a, key, mid+1, end);
    }
    else
    {
        if(key >= a[mid] && key <=a[end])
            return searchDisorderedArray(a, key, mid+1, end);
        else
            return searchDisorderedArray(a, key, begin, mid-1);
    }
}
相關文章
相關標籤/搜索