二分搜索用于在已经排序好的集合中搜索值,每次与中间值对比,小于则搜索前半段,大于中间值则在后半段,继续二分搜索,实现代码:
- /// <summary>
- /// 二分查找
- /// </summary>
- /// <param name="arr">已经排序过的数组</param>
- /// <param name="searchkey">搜索值</param>
- /// <returns></returns>
- private static int BinarySearch(int[] arr, int searchkey)
- {
- int start = 0;
- int end = arr.Length - 1;
- int mid = 0;
- while (start <= end)
- {
- mid = (start + end) / 2;
- if (arr[mid] < searchkey) //中间值小于 搜索值,说明要查找值在尾部
- {
- start = mid + 1;
- }
- else if (arr[mid] > searchkey)//中间值大于搜索值,说明要搜索值在首部
- {
- end = mid - 1;
- }
- else
- {
- return mid;
- }
- }
- return -mid;
- }
如果查询不到值返回的是负的最后查询的中间值的位置,负值变正后+1 则可用来有序插入搜索值,使列表保持排序。