たくさんのグーグルで、まだ答えがありません。
何が問題なのですか: カスタムオブジェクトと値型を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;
}
}
何か案は?:)