简单的二分搜索:在一个非递减序整型数组中搜索值value,返回其所在下标
最普通的二分搜索
Code
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
有重复元素,返回下标最小的
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
==