设array[5]是已排好序的数组,改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
#includeint BinarySearch(int arr[],int len,int num) { int left = 0; int right = len - 1; if (left == right) { return left; } while (left < right) { int middle = (left + right) / 2; if (arr[middle] == num) { return middle; } else if (arr[middle] < num) { left = middle + 1; } else if (arr[middle] > num) { right = middle - 1; } } return -1; } void Show(int n,int array[],int length,int number) { if (n == -1){ for (int i = 0; i < length; i++) { if (array[i] > number) { int min = i - 1; int max = i; printf("小于x的最大元素位置i为%dn", min); printf("大于x的最小元素位置i为%d", max); break; } } } else { printf("x的位置是%d", n); } } int main() { int array[5] = { 1,3,7,34,56 }; int length = 5; int number = 2; int num = BinarySearch(array, length, number); Show(num, array, length, number); return 0; }



