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

冒泡排序比较次数统计异常求助:为何结果始终相同?

问题分析与解决方案

嘿,我一眼就瞅出问题所在啦!你的冒泡排序比较次数统计总是相同,根源在两个关键错误:

  • 索引使用完全错误:内层循环你用j来遍历未排序的元素,但比较的时候却一直在拿array[i]和array[i+1]做判断——这意味着整个内层循环都在重复比较同一对元素!冒泡排序的核心是内层循环逐个比较相邻的j和j+1位置的元素,而不是固定的i相关索引。
  • 比较计数逻辑的前提错误:你把count++放在if判断外面的逻辑本身没问题(因为每次执行array[a] > array[b]判断就是一次比较),但因为索引错误,不管输入数组是什么,循环次数都是固定的,所以count结果也固定不变。

修正后的代码

import java.util.Arrays; // 需要导入Arrays类来复制数组

public void comparisons(int[] array) { 
    int count = 0; 
    // 复制原数组,避免排序操作修改传入的原始数组(可选,但更符合良好编程习惯)
    int[] sortedArray = Arrays.copyOf(array, array.length);
    
    for (int i = 0; i < sortedArray.length - 1; i++) { 
        for (int j = 0; j < sortedArray.length - i - 1; j++) { 
            count++; // 每执行一次比较操作,计数加1
            if (sortedArray[j] > sortedArray[j + 1]) { 
                // 交换相邻元素,完成冒泡的核心操作
                int temp = sortedArray[j];
                sortedArray[j] = sortedArray[j + 1];
                sortedArray[j + 1] = temp;
            } 
        } 
    } 
    System.out.print("\n\nComparisons:" + count); 
}

额外说明

  • 我添加了Arrays.copyOf来复制输入数组,这样你的排序操作不会改变原数组的内容,这在实际开发中是更友好的做法。
  • 现在内层循环正确地遍历未排序区间,每次比较相邻的j和j+1元素,count会准确统计每一次的比较操作。
  • 测试不同的输入数组(比如完全有序、完全逆序、随机乱序),你会得到不同的比较次数结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:57