static void Main()
        {
            int[] counts = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000 };
            var   csv    = new CsvWriter(Console.Out);
            var   algos  = new ISortImplementation[]
            {
                new ArraySort(),
                new ListSort(),
                new ArrayOrderBy(),
                new ListOrderBy(),
            };

            foreach (var count in counts)
            {
                csv.Append(count);

                foreach (var algo in algos)
                {
                    var micros = RunTest(count, algo) * 1000;
                    csv.Append(micros);
                }

                csv.AppendLine();
            }
        }
        static double RunTest(int collectionSize, ISortImplementation algo)
        {
            var iterationCount = 0;
            var minElapsedTime = TimeSpan.FromSeconds(2);
            var chrono         = new Stopwatch();

            Debug.Assert(Stopwatch.IsHighResolution);

            algo.SetCollection(GenerateRandomInts(collectionSize));

            do
            {
                chrono.Start();
                algo.Sort();
                chrono.Stop();
                iterationCount++;
            }while (chrono.Elapsed < minElapsedTime);

            return(chrono.Elapsed.TotalMilliseconds / iterationCount);
        }