二分查找 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 }

 

posted @ 2014-10-26 21:17  nipan  阅读(191)  评论(0编辑  收藏  举报