//Simple counting sort public static record[] CountingSort(record[] A) { int[] B = new int[MaxValue(A) + 1]; record[] C = new record[A.Length]; for (int i = 0; i < B.Length; i++) { B[i] = 0; } for (int i = 0; i < A.Length; i++) { B[A[i].Value]++; } for (int i = 1; i < B.Length; i++) { B[i] += B[i - 1]; } for (int i = A.Length - 1; i >= 0; i--) { int value = A[i].Value; int index = B[value]; B[value]--; C[index - 1] = new record(); C[index - 1].Key = i; C[index - 1].Value = value; } return(C); }