I just created couple algorithms for sorting with and w/out creating new array.
public static T[] SortT<T>(T[] a) where T:IComparable<T>
{
T[] result = new T[a.Length];
int current = 0;
for (int i = 0; i < a.Length; i++)
{
current = 0;
for (int j = 0; j < a.Length; j++)
{
if (a[i].CompareTo(a[j])>0)
current++;
}
result[current] = a[i];
}
for (int i = 1; i < result.Length; i++)
if (result[i].CompareTo(default(T))==0)
result[i] = result[i - 1];
return result;
}
// for sorting big data class w/out creating new Tarray.
public static void SortSwapT<T>(ref T[] a) where T:IComparable<T>
{
int[] indCurrent = new int[a.Length];
Dictionary<int, int> currentInd = new Dictionary<int, int>();
int current;
for (int i = 0; i < a.Length; i++)
{
current = 0;
for (int j = 0; j < a.Length; j++)
{
if (a[i].CompareTo(a[j])>0)
current++;
}
indCurrent[i] = current;
}
for (int i = 0; i < indCurrent.Length; i++)
{
while (currentInd.ContainsKey(indCurrent[i]))
indCurrent[i] += 1;
currentInd.Add(indCurrent[i], i);
}
T temp;
for (int i = 0; i < a.Length - 1; i++)
{
temp = a[i];
a[i] = a[currentInd[i]];
a[currentInd[i]] = temp;
currentInd[indCurrent[i]] = currentInd[i];
indCurrent[currentInd[i]] = indCurrent[i];
}
}