二分
当数组中被查找的元素只有一个时:
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;
}
Last updated