您的位置:首页 > 其它

有序环形数列的查找问题

2015-03-05 10:53 148 查看
问题:有一个有序的环形数列,从小到大排好了,比如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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: