算法练习-有序数查找
练习问题来源
https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/04.01.html
要求
给定一个有序的数组,查找某个数是否在数组中,请编程实现。
解法
在有序数组中查找,采用二分查找。
要准确实现二分查找,首先要把握下面几个要点:
关于right的赋值
right = n-1 => while(left <= right) => right = middle-1;
right = n => while(left < right) => right = middle;
middle的计算不能写在while循环外,否则无法得到更新。
代码实现
int BinarySearch(int array[], int n, int value)
{
int left = 0;
int right = n-1;
while(left <= right)
{
int middle = left + ((right - left) >> 1); // 防止溢出
if (array[middle] > value)
{
right = middle - 1;
}
else if (array[middle] < value)
{
left = middle + 1;
}
else
return middle;
}
return -1;
}