#include <iostream>
using namespace std;
// a 排序数组右移后的数组
// for example: 4,5,6,7,8,9,0,1,2,3
// 二分,返回索引
int select( int a[], int left, int right, int val)
{
if (right<left) return -1;
if (right==left)
{
if (a[right] == val)
return right;
else return -1;
}
int mid = (left+right)/2;
if (a[mid] == val) return mid;
if (a[left] == val) return left;
if (a[right] == val) return right;
if (a[left] <= a[mid])
{
if ( a[left] < val && val < a[mid])
return select(a, left+1, mid-1, val);
else
return select(a, mid+1, right-1, val);
}
else
{
if ( a[mid] < val && val < a[right])
return select(a, mid+1, right-1, val);
else
return select(a, left+1, mid-1, val);
}
}
int main(int argc, char* argv[])
{
int a[10] = {4,5,6,7,8,9,0,1,2,3};
cout<<select(a, 0, 9, 6)<<endl;
return 0;
}
排序数组循环移位后查找问题
最新推荐文章于 2022-08-13 14:33:50 发布