/*算法描述:来自《算法分析与设计》 代码来自网络QAQ*/ /* * 输入:n个元素的升序数组A[1,...,n]和元素x * 输出:如果x = A[j], 1<=j<=n,则输出j, 否则输出0 * low <- 1; high <- n; j <- 0 * while (low<=high) and (j=0) * mid <- (low+high)/2 * if x = A[mid] then j <- mid * else if x < A[mid] then high <- mid-1 * else low <- mid+1 * end while * return j */
//非递归 int BinarySearch(int *A, int aSize, int key) { if ( A == NULL || aSize == 0) return -1; int low = 0; int high = aSize - 1; int mid = 0; while (low <= high) { mid = (low + high)/2; if (A[mid] < key) low = mid + 1; else if (A[mid] > key) high = mid - 1; else return mid; } return -1; } //递归 int BinarySearchRecursive(int *A, int low, int high, int key) { if (low > high) return -1; int mid = (low + high)/2; if (A[mid] == key) return mid; else if (A[mid] < key) return BinarySearchRecursive(A, mid+1, high, key); else { return BinarySearchRecursive(A, low, mid-1, key); } } int main() { int A[10]; for (int i=0; i<10; i++) A[i] = i; cout << "No recursive:" << endl; cout << "position:"<< BinarySearch(A, 10, 6) << endl; cout << "recursive:" << endl; cout << "position:" << BinarySearchRecursive(A, 0, 9, 6) << endl; return 0;