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(); } }