Exemplo n.º 1
0
        public void SortColorAscending(List <Tshirt> tshirts)
        {
            if (tshirts == null || tshirts.Count <= 1)
            {
                return;
            }

            int m = Enum.GetNames(typeof(Color)).Length;
            int n = tshirts.Count / m;

            List <Tshirt>[] buckets = new List <Tshirt> [n];
            for (int i = 0; i < n; i++)
            {
                buckets[i] = new List <Tshirt>();
            }

            for (int i = 0; i < tshirts.Count; i++)
            {
                int bucket = (int)tshirts[i].Color;
                buckets[bucket].Add(tshirts[i]);
            }

            ISortStrategy strategy = new BubbleSortStrategy();

            for (int i = 0; i < n; i++)
            {
                strategy.SortColorAscending(buckets[i]);
            }

            int index = 0;

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < buckets[i].Count; j++)
                {
                    tshirts[index++] = buckets[i][j];
                }
            }
        }
        private static void CompareSorts(List <Tshirt> tshirts)
        {
            ISortStrategy strategy = new QuickSortStrategy();
            long          ms1      = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

            strategy.SortColorAscending(tshirts);
            long ms2 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

            Console.WriteLine($"Time elapsed for QuickSort: {ms2 - ms1}ms");


            strategy = new BubbleSortStrategy();
            ms1      = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
            strategy.SortColorAscending(tshirts);
            ms2 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
            Console.WriteLine($"Time elapsed for BubbleSort: {ms2 - ms1}ms");


            strategy = new BucketSortStrategy();
            ms1      = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
            strategy.SortColorAscending(tshirts);
            ms2 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
            Console.WriteLine($"Time elapsed for BucketSort: {ms2 - ms1}ms\n");
        }