二分查找适用于查找有序数组中的单个元素,对于有序数组[l,r],查找其中的元素t;
当数组中被查找的元素只有一个时:
int search(int *a, int t) //在长度为n的数组中查找t,
{
int l = 1;
int r = n;
while (l <= r) {
int middle = (l + r) / 2;
if (a[middle] > t) {
r = middle - 1;
}
else if (a[middle] < t) {
l = middle + 1;
}
else {
return middle;
}
}
return -1;
}
找大于等于给定数的第一个位置:
int search(int *a, int t) //找大于等于给定数的第一个位置
{
int l = 1;
int r = n;
while (l < r) {
int middle = (l + r) / 2;
if (a[middle] >= t) {
r = middle;
}
else
l = middle + 1;
}
return l;
}
找小于等于给定数的最后一个位置:
int search(int *a, int t) //找小于等于给定数的最后一个位置
{
int l = 1;
int r = n;
while (l < r) {
int middle = ceil((double)(l + r) / 2);
if (a[middle] <= t) l = middle;
else r = middle - 1;
}
return l;
}