下面是一個使用泛型實現二分查找的例子:
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
在數組中的位置。