我有一個作業來比較使用合并排序和快速排序對大型整數數組進行排序的執行時間。算法的實現是從書中復制的。它們都按升序對整數進行排序。然后我被要求說明快速排序的平均速度是多少。然而,根據我的測試樣本(盡管很小),我發現合并排序速度快了一小部分,這讓我相信我的測試不正確。我有 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()使得結果更加準確。
添加回答
舉報
0/150
提交
取消