using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace RadixSort { class Program { static void Main(string[] args) { int[] arr = { 6, 110, 5, 12, 903, 9, 20, 2, 515, 8, 18, 25, 863, 92, 82, 367, 855 }; RadixSort(arr, 3); PrintArray(arr); Console.ReadLine(); } static void PrintArray(int[] s) { for (int i = 0; i < s.Length; i++) { Console.Write("{0} ", s[i]); } Console.WriteLine(); } static void RadixSort(int[] s, int numDigits) { Queue[] bins = new Queue[10]; int n = s.Length; for (int q = 0; q < 10; q++) bins[q] = new Queue(); for (int pass = 0; pass < numDigits; pass++) { for (int i = 0; i < n; i++) { int dig = GetDigit(s[i], pass); bins[dig].Enqueue(s[i]); } int pos = 0; for (int q = 0; q < 10; q++) { while (bins[q].Count > 0) { s[pos] = bins[q].Dequeue(); pos++; } } // display result of each pass Console.Write("---"); PrintArray(s); } } static int GetDigit(int val, int pos) { for (int i = 0; i < pos; i++) val = val / 10; return val % 10; } } }