You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现选择排序的基准测试方法?排查time方法未执行问题

问题排查与解决方案

为什么time方法没执行?

  • Java程序的入口是main方法,你的代码里main完全没有调用time方法,所以这个方法根本不会被触发执行。
  • 另外,time方法里的核心排序逻辑是空的(只有注释占位符),就算调用了也测不到实际选择排序的耗时。

修复步骤

  1. 抽取选择排序逻辑为独立方法
    把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;
        }
    }
}
  1. 修改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);
}
  1. 在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 + " ");
    }
}
  1. 优化建议
    小数组排序耗时极短,可能显示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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:30:33