using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.IO;
using System.Threading;
using System.IO.Ports;
namespace Program
{
class Program
{
static void Main()
{
int[] arr = new int[] {0,2,2,2,3,4,4,4,5,6,7,8,10 };
int r1 = binary_search_left(arr, 0, arr.Length, 4);
int r2 = binary_search_right(arr, 0, arr.Length, 4);
Console.WriteLine("{0},{1}",r1,r2);
}
//找最左边的那个
//算法3点保证
//1.left左边的数字肯定比val小,不然的话,left不会往右移的
//2.每次所讨论的区间都是在减小的,即right-left一直在减小
//3.最终left一定是等于right
private static int binary_search_left(int[] arr, int left, int right, int val)//left right 分别是数组的头尾index
{
int mid;
while (left < right)
{
mid = (right + left) / 2;
if (arr[mid] < val)
left = mid + 1;
else
right = mid;
}
if (arr[left] == val)
return left;
else
return -1;
}
//找最右边的那个
//算法3点保证
//1.right右边的数字肯定比val大,不然的话,right不会往左移的
//2.每次所讨论的区间都是在减小的,即right-left一直在减小
//3.最终left一定是等于right
private static int binary_search_right(int[] arr, int left, int right, int val)//left right 分别是数组的头尾index
{
int mid;
while (left < right)
{
mid = (right + left+1) / 2;
if (arr[mid] > val)
right=mid-1;
else
left = mid;
}
if (arr[left] == val)
return left;
else
return -1;
}
}
}
二分查找
最新推荐文章于 2023-05-28 13:59:52 发布