Beispiel #1
0
        //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);
        }