有些算法虽然简单,但是到用的时候总是想不起来,或者再花时间去编写。干脆把它保存起来。到用时,直接Copy下。二分查找非递归算法: int main(int arg, int argv[]) { int array[] = {0,1,2,3,4,5,6,7,8,9}; int count = sizeof (array) / sizeof (array[0]); int result = BSearch(array, 5, count); printf("%d", result); return 0; } int BSearch(int array[], int element, int count) { int left = 0; int right = count - 1; int mid = -1; while (left <= right) { mid = (left+right) / 2; if (array[mid] > element) right = mid - 1; else if (array[mid] < element) left = mid + 1; else return mid; } return mid; } 二分查找递归算法: int main(int arg, int argv[]) { int array[] = {0,1,2,3,4,5,6,7,8,9}; int count = sizeof (array) / sizeof(array[0]); int left = 0; int right = count - 1; int result = BSearch(array, 5, left, right); printf("%d", result); return 0; } int BSearch(int array[], int element, int left, int right) { if (left > right) return -1; int mid = (left + right) / 2; if (array[mid] == element) return mid; else if (array[mid] > element) return BSearch(array, element, left, mid-1); else return BSearch(array, element, mid+1, right); }