代码改变世界

Binary Search

2013-08-11 10:25  北漂男孩  阅读(170)  评论(0编辑  收藏  举报

简单的二分搜索:在一个非递减序整型数组中搜索值value,返回其所在下标

最普通的二分搜索
 1 static int BinarySearch(int[] arr, int value)
 2 {
 3     int l = 0;
 4     int r = arr.Length - 1;
 5 
 6     while (l <= r)
 7     {
 8         // 防溢出,若使用 (l + r) / 2
 9         // 当l 和 r 都很大时可能会溢出
10         int m = l + (r - l) / 2;
11 
12         if (arr[m] < value)
13             l = m + 1;
14         if (arr[m] == value)
15             return m;
16         if (arr[m] > value)
17             r = m - 1;
18     }
19 
20     return -1;// 未找到
21 }
22 
View Code

有重复元素,返回下标最小的

1 static int BinarySearch2(int[] arr, int value)
 2 {
 3     int l = 0;
 4     int r = arr.Length - 1;
 5 
 6     while (l <= r)
 7     {
 8         int m = l + (r - l) / 2;
 9 
10         if (arr[m] < value)
11             l = m + 1;
12         if (arr[m] == value)
13         {
14             // 如果左边有相等元素,且下标在范围内,继续比较
15             if (m - 1 >= 0 && arr[m - 1] == value)
16                 r = m - 1;
17             else //否则直接返回
18                 return m;
19         }
20         if (arr[m] > value)
21             r = m - 1;
22     }
23 
24     return -1;
25 }
26