我有一個作業(yè)來比較使用合并排序和快速排序對大型整數(shù)數(shù)組進行排序的執(zhí)行時間。算法的實現(xiàn)是從書中復制的。它們都按升序對整數(shù)進行排序。然后我被要求說明快速排序的平均速度是多少。然而,根據(jù)我的測試樣本(盡管很?。野l(fā)現(xiàn)合并排序速度快了一小部分,這讓我相信我的測試不正確。我有 2 個程序,一個用于合并排序,一個用于快速排序。它們的 main() 代碼是相同的(如下所示)。我創(chuàng)建了一個隨機大小在 0 和某個選定上限之間的數(shù)組。然后我用隨機整數(shù)填充數(shù)組。然后我對數(shù)組進行排序并打印它。我使用 currentTimeMillis() 來檢查程序的運行時間。我對快速排序和合并排序進行了 10 次運行測試,將總時間相加并除以 10 以獲得排序的平均運行時間。我沒有發(fā)現(xiàn)快速排序平均比合并排序更快。我也嘗試過使用固定的數(shù)組大小,但結果仍然沒有暗示快速排序更快。什么是正確的測試方法?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條經(jīng)驗 獲得超7個贊
您的測量包括隨機數(shù)組的生成,這是一項繁重的操作,并且會扭曲結果。
// do initialization here
long a = System.nanoTime();
sort(array);
long b = System.nanoTime();
// do the output here
...只會測量執(zhí)行期間經(jīng)過的時間sort(array)。哪個時間是您感興趣的時間。
替換System.currentTimeMillis()為System.nanoTime()使得結果更加準確。
添加回答
舉報
0/150
提交
取消