Files

50 lines
1.3 KiB
C
Raw Permalink Normal View History

2026-06-14 23:45:55 +08:00
#include<stdio.h>
void Search(int a[], int n, int x, int *i, int *j) {
int start = 0, end = n - 1;
*i = -1;
*j = -1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (a[mid] == x) {
*i = mid; // 找到目标元素
*j = mid; // 初始化 *j
// 向左查找相同元素
while (*i > 0 && a[*i - 1] == x) {
(*i)--;
}
// 向右查找相同元素
while (*j < n - 1 && a[*j + 1] == x) {
(*j)++;
}
return;
} else if (a[mid] < x) {
start = mid + 1;
*i = mid; // 可能是小于 x 的最大元素
} else {
end = mid - 1;
*j = mid; // 可能是大于 x 的最小元素
}
}
}
int main() {
int a[] = {2, 4, 6, 8, 9, 10, 12, 13};
int x = 7;
int n = sizeof(a) / sizeof(a[0]);
int i, j;
Search(a, n, x, &i, &j);
if (i == -1 && j == -1) {
printf("未找到%d的信息\n", x);
} else if (i == j) {
printf("目标元素%d位于%d\n", x, i);
} else {
printf("未找到目标元素%d的值\n", x);
printf("小于%d的最大元素位置%d\n", x, i);
printf("大于%d的最小元素位置%d\n", x, j);
}
}