对排序序列进行查找,可以进行二分查找,时间复杂度为O(log(n)).
原理很简单,但是能正确无误的写出其代码,也并不容易。
主要需要注意的是:循环条件的判断和右端标记的下次迭代。
当left<=right; right=middle-1;
当left
int search(int array[], int n, int v)
{
int left, right, middle;
left = 0, **right = n - 1;**
while (**left <= right**)
{
middle = left + (right-left)/2;
if (array[middle] > v)
{
**right = middle - 1**;
}
else if (array[middle] < v)
{
left = middle + 1;
}
else
{
return middle;
}
}
return -1;
}
版本二:
int search(int array[], int n, int v)
{
int left, right, middle;
left = 0, **right = n;**
while (**left < right**)
{
middle = left + (right-left)/2;
if (array[middle] > v)
{
**right = middle;**
}
else if (array[middle] < v)
{
left = middle + 1;
}
else
{
return middle;
}
}
return -1;
}