循环数组的查找
有一个循环有序数组A,如{7,8,9,0,1,2,3,4,5,6},不知道其最小值的位置。那么如何从这样的数组中寻找一个特定的元素呢?
解题思路
我们可以把循环数组分为两部分,其中必定有一部分是排好序的,比较元素的值,如果在排序数组中则直接进行二分查找即可,如果不在排好序的数组中,则递归的调用查找函数。
#include <iostream>
using namespace std;
int binarySearch(int a[], int low, int high, int value) //二分查找
{
if (low>high)
return -1;
int mid = (low + high) / 2;
if (value == a[mid])
return mid;
else if (value>a[mid])
return binarySearch(a, mid + 1, high, value);
else
return binarySearch(a, low, mid - 1, value);
}
int Search(int a[], int low, int high, int value) //循环有序查找函数
{
int mid = (low + high) / 2;
if (a[mid]>a[low]) //左有序
{
if (a[low] <= value && value <= a[mid]) //说明value在左边,直接二分查找
{
return binarySearch(a, low, mid, value);
}
else //value在右边
{
return Search(a, mid + 1, high, value);
}
}
else //右有序
{
if (a[mid] <= value && value <= a[high])
{
return binarySearch(a, mid, high, value);
}
else
{
return Search(a, low, mid - 1, value);
}
}
}
int main()
{
int a[] = { 3,4,5,6,7,8,9,0,1,2 };
cout << Search(a, 0, 9, 0) << endl;
system("pause");
return 0;
}