Java选择排序多轮运行耗时平均值计算问题求助
要实现多次运行耗时的平均值计算,只需要新增一个累计变量存储总耗时,循环结束后做除法即可,修改逻辑如下:
具体修改步骤
- 在外层的10000次执行循环外,初始化一个总耗时变量,初始值为0
- 每次循环得到单次耗时
elapsedTime后,将其累加进总耗时变量 - 所有循环执行结束后,用总耗时除以执行次数,得到平均耗时
注意:如果要准确统计排序算法的耗时,建议删除printArray(n)调用,控制台IO打印的耗时远高于排序本身,会导致测试结果严重失真。
修改后完整代码
package ClassOne; import java.util.Random; public class SelectionProgram { public static void main(String[] args) { int executeTimes = 10000; // 总耗时变量,用long存储精度更高 long totalElapsedTime = 0; for (int j = 0; j < executeTimes; j++) { long startTime = System.nanoTime(); Random rd = new Random(); int [] n = new int [100]; for (int i = 0; i < n.length; i++) { n[i] = rd.nextInt(); } SelectionSort(n); // 测试排序性能时建议注释掉下面这行打印 printArray(n); long endTime = System.nanoTime(); long elapsedTime = endTime - startTime; // 累加单次耗时到总耗时 totalElapsedTime += elapsedTime; System.out.println("第" + (j+1) + "次执行耗时:" + elapsedTime + "纳秒"); } // 计算平均耗时 double avgElapsedTime = (double) totalElapsedTime / executeTimes; System.out.println("======================"); System.out.println("总执行次数:" + executeTimes); System.out.println("总耗时:" + totalElapsedTime + "纳秒"); System.out.println("平均单次耗时:" + avgElapsedTime + "纳秒"); } public static int[] SelectionSort(int[] A) { int k; int temp; for (int i=0; i<A.length-1; i++) { k=i; for (int j=i+1; j<=A.length-1; j++) { if (A[j]<A[k]) { k=j; } } temp = A[i]; A[i] = A[k]; A[k] = temp; } return A; } public static void printArray(int[] A) { for(int i = 0; i<A.length; i++) { System.out.println(A[i]); } } }
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

