Binary Search
2013-08-11 10:25 北漂男孩 阅读(171) 评论(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
有重复元素,返回下标最小的
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