【问题标题】:Using a counter in bubble sort在冒泡排序中使用计数器
【发布时间】:2018-04-23 16:12:47
【问题描述】:

问题是计算我的冒泡排序算法切换数字位置的次数。我尝试使用一个每次递增一的变量,但我认为范围或类似的东西可能存在错误。它没有返回诸如 6 之类的数字(这意味着数字被交换了 6 次),而是返回 0,这就是我将变量初始化为的值。如何让我的程序运行?

public static int sort(int arr[]) {
    int length = arr.length;
    int temp;
    int count = 0;
    for (int i = 0; i < (length); i++) {
        for (int j = 1; j < (length); j++) {
            if (arr[j - 1] > arr[j]) {
                temp = arr[j-1];
                arr[j-1] = arr[j];
                arr[j] = temp;
                count++;
            }
        }
    }
    return count;
}

【问题讨论】:

  • 您的柜台似乎摆放得当。为什么你认为有错误?你得到了什么结果,你认为你应该得到什么结果?
  • 我只得到 0,这就是我将变量初始化为(第 4 行)。我希望它每次运行第 7 行的 if 语句时都加 1
  • @KenzoEngineer 您的数组似乎只包含一个元素或所有元素都相同。
  • @ShubhenduPramanik 我使用了一个包含许多不同整数的测试用例,并且排序工作正常,所以情况并非如此
  • 你能发布一个带有计数器期望值的测试用例吗?

标签: java methods counter bubble-sort


【解决方案1】:

由于您的 for 循环条件和初始化,您的算法似乎没有优化。结果,您将一个元素与其自身进行比较,这是多余的。

正确的方法应该如下:

int yourCounter = 0;
for (int i = 0; i < length; i++)
 for (int j = 1; j < length-i; j++)
   if (arr[j - 1] > arr[j]) {
     //swap code
     //yourCounter++;
   }

那么你的计数器应该会给你正确的结果。

【讨论】:

  • 我将代码更改为看起来像您的代码,但当我返回时 yourCounter 仍然显示为 0...
  • @KenzoEngineer 与此调用 System.out.println(sort(new int[] { 1, 5, 2, 6, 4 })); 我得到的输出为 3 这是正确的。
猜你喜欢
  • 1970-01-01
  • 2019-10-04
  • 2016-04-04
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多