1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <stdio.h>
int binarySearch(int a[], int n, int target) { int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (a[mid] == target) return mid; else if (a[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }
int findFirst(int a[], int n, int target) { int left = 0, right = n - 1, result = -1; while (left <= right) { int mid = left + (right - left) / 2; if (a[mid] == target) { result = mid; right = mid - 1; } else if (a[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return result; }
int findLast(int a[], int n, int target) { int left = 0, right = n - 1, result = -1; while (left <= right) { int mid = left + (right - left) / 2; if (a[mid] == target) { result = mid; left = mid + 1; } else if (a[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return result; }
int main() { int a[] = {1, 3, 3, 3, 5, 7, 9}; int n = 7; printf("查找3的位置: %d\n", binarySearch(a, n, 3)); printf("第一个3的位置: %d\n", findFirst(a, n, 3)); printf("最后一个3的位置: %d\n", findLast(a, n, 3)); return 0; }
|