很多谷歌搜索,仍然没有答案。
问题是什么: 我正在尝试实现通用排序方法来对自定义对象和值类型进行排序,如 int、uint 等。快速排序、堆排序等没有问题。此外,我发现计数排序不可能,因为这是特异性。所有数据必须是非负整数。
问题:
where T : struct..
不要给需要的一元运算符“+-”,据我所知,不可能强制它。如何设置正确的类型约束,或者如何强制 T 使用运算符“+-”?
public interface ISortMethod<T> where T : IComparable<T>
{
T[] Sort(T[] tablica);
}
public class CountingSort<T> : ISortMethod<T>
where T : IComparable<T>
{
public T[] Sort(T[] tablica)
{
T[] tab2 = (T[])tablica.Clone();
return Sortuj(tab2);
}
private T[] Sortuj(T[] tab)
{
T min = tab[0];
T max = tab[0];
T[] res = new T[tab.Length];
//< 0 wczesniejsza this
for (int i = 0; i < tab.Length; i++)
{
if (tab[i].CompareTo(max) > 0)
max = tab[i];
if (tab[i].CompareTo(min) < 0)
min = tab[i];
}
T[] cData = new T[**(max - min)** + 1];
for (int i = 0; i < tab.Length; i++)
**cData[tab[i] - min] += 1**;
for (int i = 1; i < cData.Length; i++)
cData[i] += cData[i - 1];
for (int i = tab.Length-1; i >= 0 ; i--)
{
res[cData[tab[i] - min] - 1] = tab[i];
cData[tab[i] - min]--;
}
return res;
}
}
有任何想法吗?:)