static void Main(string[] args) { int seed = (int)DateTime.Now.Ticks; MyDataArray data = new MyDataArray(10, 101); Console.WriteLine("[ARRAY] Counting sort"); data.Print(data.Length); CountingSort(data); data.Print(data.Length); Console.ReadKey(); }
public static void CountingSort(MyDataArray items) { MyDataArray output = new MyDataArray(items.Length); int minValue = items[0]; int maxValue = items[0]; //Finds min and max values for (int i = 0; i < items.Length; i++) { if (items[i] < minValue) { minValue = items[i]; } if (items[i] > maxValue) { maxValue = items[i]; } } //Counts frequencies int[] counts = new int[maxValue - minValue + 2]; for (int i = 0; i < items.Length; i++) { counts[items[i] - minValue + 1]++; } //Each element stores the sum of previous counts for (int i = 1; i < counts.Length; i++) { counts[i] += counts[i - 1]; } //Puts each element from items array to the right place using counts saved index for (int i = 0; i < items.Length; i++) { output[counts[items[i]] - 1] = items[i]; counts[items[i]]--; } }