using System;
using System.Collections.Generic;
namespace TestCSharp
{
class Program
{
static void Main(string[] args)
{
int[] list = new int[] { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(BinarySearch(list, 1));
Console.ReadKey();
}
public static int BinarySearch(int[] list, int targetValue)
{
return RecurseFind(list, targetValue, 0, list.Length - 1);
int midIndex = 0;
int startIndex = 0;
int endIndex = list.Length - 1;
while (startIndex <= endIndex)
{
midIndex = (startIndex + endIndex) / 2;
if (list[midIndex] > targetValue)
{
endIndex = midIndex - 1;
}
else if (list[midIndex] < targetValue)
{
startIndex = midIndex + 1;
}
else
{
return midIndex;
}
}
return -1;
}
static int RecurseFind(int[] list, int targetValue, int startIndex, int endIndex)
{
if (startIndex > endIndex)
{
return -1;
}
int midIndex = (startIndex + endIndex) / 2;
if (list[midIndex] > targetValue)
{
return RecurseFind(list, targetValue, startIndex, midIndex - 1);
}
else if (list[midIndex] < targetValue)
{
return RecurseFind(list, targetValue, midIndex + 1, endIndex);
}
else
{
return midIndex;
}
}
}
}