冒泡排序比较次数统计异常求助:为何结果始终相同?
问题分析与解决方案
嘿,我一眼就瞅出问题所在啦!你的冒泡排序比较次数统计总是相同,根源在两个关键错误:
- 索引使用完全错误:内层循环你用
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
相关产品推荐
相关产品推荐

