public static T[] BubbleSort<T>(this T[] arr) where T : class
{
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr.Length-1; j++)
{
if (arr[j - 1] > arr[j])
swap(arr[j - 1], arr[j]);
}
}
}
如何创建通用冒泡排序扩展方法?有没有办法处理这里的比较? 错误1运算符'&gt;'不能应用于'T'和'T'类型的操作数
答案 0 :(得分:10)
您可以将T
限制为IComparable<T>
,如下所示:
public static void BubbleSort<T>(this T[] arr) where T : IComparable<T>
{
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr.Length-1; j++)
{
if (arr[j].CompareTo(arr[j + 1]) > 0)
swap(arr[j], arr[j + 1]);
}
}
}
的优点是T也可以是int
之类的值类型。此外,您的函数不需要在更改this
数组时返回数组。
答案 1 :(得分:2)
您无法在类型参数上使用<
。
所以你可以使用Comparer<T>.Default
。
或者您可以添加一个需要T
来实施IComparable<T>
的通用约束。然后,您可以调用Compare
方法。
此外,您的j
循环已被关闭。您需要比较&amp;交换arr [j]和arr [j + 1]或将下限更改为1
,将上限更改为arr.Length
答案 2 :(得分:1)
您可以采取以下几种方式:
IComparable<T>
并使用CompareTo
方法进行比较。IComparer<T>
类型的第二个参数。然后,您将使用此比较器对象进行密钥比较。