public static void CountSort(DataList list)
        {
            if (list == null)
            {
                return;
            }

            //Finds min and max values
            int[] output   = new int[list.Length];
            int   minValue = list.Min();
            int   maxValue = list.Max();

            //Counts frequencies
            int[] counts = new int[maxValue - minValue + 2];
            for (list.Head(); list.NotNull(); list.Next())
            {
                counts[list.Current() - minValue]++;
            }

            //Each element stores the sum of previous counts
            counts[0]--;
            for (int i = 1; i < counts.Length; i++)
            {
                counts[i] += counts[i - 1];
            }

            for (list.Head(); list.NotNull(); list.Next())
            {
                output[counts[list.Current() - minValue]--] = list.Current();
            }

            //list = new MyLinkedList(output);
            list.Head();
            for (int i = 0; i < list.Length; i++)
            {
                list.ChangeData(output[i]);
                list.Next();
            }
        }