问题:给定一个由不同整数a1,a2,...an按序排列的序列,确定是否存在某个下标i,使得ai =i.
分析:采用分治的思想,若an/2<n/2,则前一半序列均不满足性质,仅需要在后一半序列中查找,an/2>n/2的情形也是类似,因为这是一个互不相同的有序序列
int Special_Binary_Search(int left, int right)
{
if (left == right)
{
if (a[left] == left)
{
return left;
}
else
{
return -1;
}
}
int middle = (left + right) / 2;
if (a[middle] < middle)
{
return Special_Binary_Search(middle + 1, right);
}
else
return Special_Binary_Search(left, middle - 1);
}