/// <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; } }