亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確比較排序方法快速排序和歸并排序之間的運行時間?

如何正確比較排序方法快速排序和歸并排序之間的運行時間?

飲歌長嘯 2023-08-16 17:42:21
我有一個作業來比較使用合并排序和快速排序對大型整數數組進行排序的執行時間。算法的實現是從書中復制的。它們都按升序對整數進行排序。然后我被要求說明快速排序的平均速度是多少。然而,根據我的測試樣本(盡管很小),我發現合并排序速度快了一小部分,這讓我相信我的測試不正確。我有 2 個程序,一個用于合并排序,一個用于快速排序。它們的 main() 代碼是相同的(如下所示)。我創建了一個隨機大小在 0 和某個選定上限之間的數組。然后我用隨機整數填充數組。然后我對數組進行排序并打印它。我使用 currentTimeMillis() 來檢查程序的運行時間。我對快速排序和合并排序進行了 10 次運行測試,將總時間相加并除以 10 以獲得排序的平均運行時間。我沒有發現快速排序平均比合并排序更快。我也嘗試過使用固定的數組大小,但結果仍然沒有暗示快速排序更快。什么是正確的測試方法?public static void main(String[] args){        /* create an array of some size 0 to 100000 with           random integers and measure the time it takes           to sort the array in ascending order (where sort() is either quicksort            or mergesort.)        */        long a = System.currentTimeMillis();        Random rnd = new Random(System.currentTimeMillis());        Integer[] array = new Integer[rnd.nextInt(100000)];        for(int i = 0; i < array.length; i++){            array[i] = rnd.nextInt();        }        sort(array);        System.out.println(Arrays.toString(array));        long b = System.currentTimeMillis() - a;        System.out.println("Program runtime: " + b + "ms");    }}Expected result: Quicksort average running time should be some % fasterin comparison to mergesort, for large random integer arrays.Actual result: Mergesort was slightly faster in most tests (10K elements, 100K elements, 1000K elements).
查看完整描述

1 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您的測量包括隨機數組的生成,這是一項繁重的操作,并且會扭曲結果。


// do initialization here


long a = System.nanoTime();

sort(array);

long b = System.nanoTime();


// do the output here

...只會測量執行期間經過的時間sort(array)。哪個時間是您感興趣的時間。


替換System.currentTimeMillis()為System.nanoTime()使得結果更加準確。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號