#include 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); } }