给定按升序排列的n个不同整数存于数组a[1:n]中,请设计O(log n)的算法找到下标i,1 ≤ i ≤ n,使得a[i] = i,如不存在这样的下标,则返回0。要求写出函数实现。函数原型如下:int find(int a[],int n);正确的程序是( )
A.
int find (int [] a, int n) { int left = 1; int right = n ; int mid = ⌊ (left + right)/2 ⌋ ; while (left <= right) { if (a[mid]==mid) return mid; if (a[mid]> mid) right = mid – 1; else left = mid + 1; } return 0; }
B.
int find (int [] a, int n) { int left = 1; int right = n ; while (left < right) { int mid=⌊ (left + right)/2 ⌋ ; if (a[mid]==mid) return mid; if (a[mid]> mid) right = mid – 1; else left = mid + 1; } return 0; }
C.
int find (int [] a, int n) { int left = 1; int right = n ; while (left <= right) { if (a[mid]==mid) return mid; if (a[mid]> mid) right = mid – 1; else left = mid + 1; int mid = ⌊ (left + right)/2 ⌋ ; } return 0; }
D.
int find (int [] a, int n) { int left = 1; int right = n ; while (left <= right) { int mid=⌊ (left + right)/2 ⌋ ; if (a[mid]==mid) return mid; if (a[mid]> mid) right = mid – 1; else left = mid + 1; } return 0; }