如何实现选择排序的基准测试方法?排查time方法未执行问题
问题排查与解决方案
为什么time方法没执行?
- Java程序的入口是
main方法,你的代码里main完全没有调用time方法,所以这个方法根本不会被触发执行。 - 另外,
time方法里的核心排序逻辑是空的(只有注释占位符),就算调用了也测不到实际选择排序的耗时。
修复步骤
- 抽取选择排序逻辑为独立方法
把main里的排序代码抽成单独的静态方法,方便在time中调用,同时让代码结构更清晰:
public static void selectionSort(int[] array) { int i; int j; int t; int smallestNumber; for(i = 0; i < array.length-1; i++) { smallestNumber = i; for(j = i + 1; j < array.length; j++) { if(array[j] < array[smallestNumber]) { smallestNumber = j; } } if(array[i] > array[smallestNumber]) { t = array[i]; array[i] = array[smallestNumber]; array[smallestNumber] = t; } } }
- 修改
time方法,加入实际排序逻辑
调整time的参数(原String[] args无意义),让它接收测试数组,并在计时区间内调用排序方法:
public static void time(int[] array) { // 计时开始 long startTime = System.nanoTime(); // 执行要测量的选择排序 selectionSort(array); // 计时结束 long endTime = System.nanoTime(); long timeElapsed = endTime - startTime; System.out.println("Execution time in nanoseconds: " + timeElapsed); System.out.println("Execution time in milliseconds: " + timeElapsed / 1000000); }
- 在
main方法中调用time方法
修改main,准备测试数组后调用time完成计时,最后打印排序结果:
public static void main(String[] args) { // 可以用更大的数组测试,小数组耗时太短可能显示0 int[] array = {12, 3, 7, 6, 2, 9, 1, 5, 10, 4}; // 调用计时方法 time(array); // 打印排序后的数组 System.out.print("Selection Sort: "); for(int num : array) { System.out.print(num + " "); } }
- 优化建议
小数组排序耗时极短,可能显示0纳秒,建议生成随机大数组(比如长度10000)来测试,结果更有参考性:
// 生成随机大数组示例 int[] bigArray = new int[10000]; Random random = new Random(); for(int i = 0; i < bigArray.length; i++) { bigArray[i] = random.nextInt(100000); }
完整修复后的代码
import java.util.Random; public class Selection_Sort { public static void main(String[] args) { // 测试用数组,可替换为随机大数组 int[] array = {12, 3, 7, 6, 2, 9, 1, 5, 10, 4}; // 调用计时方法 time(array); // 打印排序结果 System.out.print("\nSelection Sort: "); for(int num : array) { System.out.print(num + " "); } } public static void selectionSort(int[] array) { int i; int j; int t; int smallestNumber; for(i = 0; i < array.length-1; i++) { smallestNumber = i; for(j = i + 1; j < array.length; j++) { if(array[j] < array[smallestNumber]) { smallestNumber = j; } } if(array[i] > array[smallestNumber]) { t = array[i]; array[i] = array[smallestNumber]; array[smallestNumber] = t; } } } public static void time(int[] array) { long startTime = System.nanoTime(); selectionSort(array); long endTime = System.nanoTime(); long timeElapsed = endTime - startTime; System.out.println("Execution time in nanoseconds: " + timeElapsed); System.out.println("Execution time in milliseconds: " + timeElapsed / 1000000); } }
内容的提问来源于stack exchange,提问作者Javaebeginner
相关产品推荐
相关产品推荐

