/// <summary>
    /// 执行一次测试并绘制图像。
    /// </summary>
    public void Test()
    {
        var random = new Random();
        var array  = SortCompare.GetRandomArrayDouble(_n);
        var time   = SortCompare.Time(_sort, array);

        _resultList.Add(time);
        _resultYList.Add((float)(random.NextDouble() * _drawRect.Height));
        DrawPanel(_resultList.ToArray(), _resultYList.ToArray());
    }
        /// <summary>
        /// 执行一次测试并绘制图像。
        /// </summary>
        public void Test()
        {
            Random random = new Random();

            double[] array = SortCompare.GetRandomArrayDouble(this.n);
            double   time  = SortCompare.Time(this.sort, array);

            this.resultList.Add(time);
            this.resultYList.Add((float)(random.NextDouble() * this.drawRect.Height));
            DrawPanel(this.resultList.ToArray(), this.resultYList.ToArray());
        }
        /// <summary>
        /// 后台测试方法。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            var worker = sender as BackgroundWorker;
            var quick  = new QuickSort();

            var percentPerTrial = 100.0 / T;
            var totalTime       = new double[T];

            for (var i = 0; i < T; i++)
            {
                var data = SortCompare.GetRandomArrayDouble(N);
                totalTime[i] = SortCompare.Time(quick, data);
                worker.ReportProgress((int)(percentPerTrial * i));
            }

            e.Result = totalTime;
        }
        /// <summary>
        /// 后台测试方法。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            QuickSort        quick  = new QuickSort();

            double percentPerTrial = 100.0 / this.T;

            double[] totalTime = new double[this.T];
            for (int i = 0; i < this.T; i++)
            {
                double[] data = SortCompare.GetRandomArrayDouble(this.N);
                totalTime[i] = SortCompare.Time(quick, data);
                worker.ReportProgress((int)(percentPerTrial * i));
            }

            e.Result = totalTime;
        }
        static void Main(string[] args)
        {
            var n = 1000;
            var topBottomMergeSort = new MergeSort();
            var bottomUpMergeSort  = new MergeSortBU();
            var trialTimes         = 100;

            for (var i = 0; i < 4; i++)
            {
                Console.Write("数组大小:" + n + "\t");
                int time1 = 0, time2 = 0;
                for (var j = 0; j < trialTimes; j++)
                {
                    var data1 = SortCompare.GetRandomArrayDouble(n);
                    var data2 = new double[n];
                    data1.CopyTo(data2, 0);
                    time1 += (int)SortCompare.Time(topBottomMergeSort, data1);
                    time2 += (int)SortCompare.Time(bottomUpMergeSort, data2);
                }

                Console.WriteLine("自顶向下:" + time1 / trialTimes + "ms\t自底向上:" + time2 / trialTimes + "ms");
                n *= 10;
            }
        }