Пример #1
0
        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();
        }
Пример #2
0
        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]]--;
            }
        }