二分查找 Binary Search
简单地用递归的方法实现了二分查找算法,适用于数组。
二分查找算法的前提条件是数组本身是有序的,比如int arr[6] = {2, 3, 5, 7, 11, 13};
在数据是稳定有序、几乎不存在插入和删除操作的情况下,二分查找是实用的。
代码如下:
1 // 递归 2 int 3 BinarySearch(int arr[], int key, int left, int right) 4 { 5 if (left > right) { 6 return -1; 7 } 8 9 int middle = (left + right) / 2; 10 11 if (arr[middle] == key) { 12 return middle; 13 } else if (arr[middle] > key) { 14 return BinarySearch(arr, key, left, middle-1); 15 } else if (arr[middle] < key) { 16 return BinarySearch(arr, key, middle+1, right); 17 } 18 } 19 // 非递归 20 int 21 BinarySearch(int arr[], int key, int len) 22 { 23 int low, high, mid; 24 25 low = 0; 26 high = len - 1; 27 28 while (low <= high) { 29 mid = (low + high) / 2; 30 if (arr[mid] > key) { 31 high = mid - 1; 32 } 33 else if (arr[mid] < key) { 34 low = mid + 1; 35 } 36 else { 37 return mid; 38 } 39 } 40 41 return -1; 42 }