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

如何实现不同数组规模的逆序数统计?排查循环异常问题

问题排查与代码修正

1. 无限循环的核心原因

外层循环出现无限循环是两个低级错误导致的:

  • 初始值错误:伪代码要求从5000开始,你写的是int n = 0
  • 赋值运算符错误:n =+ 5000是直接把5000赋值给n(等同于n = 5000),而非累加操作,正确的累加运算符是n += 5000

这两个错误导致循环变量n始终停留在5000,永远满足n < 50000的条件,陷入无限循环。

2. 其他逻辑修正点

除了无限循环,代码还有几处不符合伪代码逻辑的问题:

  • 数组大小未关联当前循环的n:你用了固定的arrSize,应该每次根据当前n创建对应大小的新数组
  • 缺少总耗时累加与平均计算:伪代码要求统计10次运行的总耗时并输出平均值,你的代码只打印了单次耗时
  • 存在冗余初始化:外层循环里的第一个数组初始化是重复操作,内层循环已经完成了这个步骤

3. 修正后的完整代码

public class InversionCountTimer {
    private static final int NUMSEXP = 10;

    public static void main(String[] args) {
        // 修正外层循环:覆盖5000-50000,步长5000
        for (int n = 5000; n <= 50000; n += 5000) {
            long totalTime = 0;
            int count = 1;

            // 执行10次实验
            for (int j = 0; j < NUMSEXP; j++) {
                // 根据当前n创建新数组并填充随机数
                int[] arr = new int[n];
                for (int i = 0; i < n; i++) {
                    arr[i] = (int) (Math.random() * (10 * n));
                }

                long startTime = System.nanoTime();
                // 运行逆序数统计与排序算法
                int inversionCount = countInversionAndSort(arr, 0, arr.length - 1);
                long endTime = System.nanoTime();

                // 累加总耗时
                totalTime += (endTime - startTime);

                // 打印单次实验结果
                System.out.println(count++ + " Inversion Count: " + inversionCount);
                System.out.println("Elapsed Time in Nano seconds: " + (endTime - startTime) + "\n");
            }

            // 计算并输出当前数组规模的平均耗时
            long averageTime = totalTime / NUMSEXP;
            System.out.println("=== Array Size: " + n + ", Average Time (nanoseconds): " + averageTime + " ===");
            System.out.println("----------------------------------------\n");
        }
    }

    // 此处为你已实现的逆序数统计与排序方法
    private static int countInversionAndSort(int[] arr, int left, int right) {
        // 替换为你的实际实现逻辑
        return 0;
    }
}

4. 关键修正说明

  • 外层循环:for (int n = 5000; n <= 50000; n += 5000),确保覆盖所有目标数组规模,步长正确累加
  • 数组创建:每次循环根据当前n创建新数组,避免固定大小数组的越界或无效数据问题
  • 耗时统计:新增totalTime变量累加每次运行耗时,最后计算平均耗时,完全符合伪代码要求
  • 冗余清理:移除外层循环中重复的数组初始化代码,减少不必要的性能开销

内容的提问来源于stack exchange,提问作者leomarrg1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:15:38