下面是一个使用泛型实现二分查找的例子:
using System;
class BinarySearch<T> where T : IComparable
{
public static int Search(T[] array, T value)
{
int min = 0;
int max = array.Length - 1;
while (min <= max)
{
int mid = (min + max) / 2;
if (array[mid].CompareTo(value) == 0)
{
return mid;
}
else if (array[mid].CompareTo(value) < 0)
{
min = mid + 1;
}
else
{
max = mid - 1;
}
}
return -1;
}
}
class Program
{
static void Main()
{
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int value = 5;
int index = BinarySearch<int>.Search(array, value);
if (index != -1)
{
Console.WriteLine($"Value {value} found at index {index}");
}
else
{
Console.WriteLine($"Value {value} not found in array");
}
}
}
在这个例子中,我们使用泛型 T
来表示数组和要查找的值的类型。我们要求 T
必须实现 IComparable
接口,以便能够使用 CompareTo
方法来比较两个对象。然后我们定义了一个 BinarySearch
类,其中包含一个静态方法 Search
,该方法接受一个数组和要查找的值,并返回该值在数组中的索引(如果存在)或 -1(如果不存在)。在 Main
方法中,我们创建了一个整数数组,并使用 BinarySearch
类来查找值 5
在数组中的位置。