【问题标题】:Bubble Sort method swapping冒泡排序方法交换
【发布时间】:2015-03-16 01:19:46
【问题描述】:

我的任务要求我编写几个方法来比较 .txt 文件中的名字数组。

我目前卡在 BubbleSort 方法上。试图让它运行。

这是我的 BubbleSort 代码:

 public static int bubbleSort(String[] array) {
    boolean swapped = false;
    int compNumber = 0;
    int length = length.array;
    while (swapped = false) {
      for (int i = 0; i < length.array-1; i++) {
        if (array[i-1] > array[i]) {
          String temp = 
          array[i-1] = array[i];
          swapped = true;
        }
      }
    }
    return compNumber;
  }

我不相信我交换正确,因为我不确定如何使用 temp 变量(因此它是空白的)。

有人可以看看这个并指出我正确的方向吗?

提前非常感谢!

【问题讨论】:

  • 这段代码一团糟……它还能编译吗?
  • while(swapped = false) 将在检查之前将 swapped 设置为 false,因此您的循环将永远不会运行。你可能想要false == swapped!swapped
  • @TimBiegeleisen 不,先生,它没有。我还没说完。我需要弄清楚如何跟踪此方法将对冗长的字符串数组进行的比较次数。

标签: java bubble-sort


【解决方案1】:

不确定您的算法是否正确,但这是交换的标准方法。如果您正在对字符串数组进行排序,您还需要获取数值(我假设字符串包含数字?)。 还刚刚注意到你会得到一个数组越界异常,如果你正在查看索引 i-1,则从 1 开始。 还有一件事,i &lt; length.array-1 应该是i &lt; array.length

还有一件事,循环应该继续,直到没有进行交换,所以它应该是while (swapped == true),并在每次迭代中将其重新设置为 false。

    public static void bubbleSort(String[] array) {
    boolean swapped = true;
    int compNumber = 0;
    int length = length.array;
    while (swapped == true) { //note the ==
      swapped = false;
      for (int i = 1; i < array.length; i++) {
        compNumber++;
        if (Integer.parseInt(array[i-1]) > Integer.parseInt(array[i])) {
          String temp = array[i-1]
          array[i-1] = array[i];
          array[i] = temp;
          swapped = true;
        }
      }
    }
    return compNumber; 
  }

【讨论】:

  • compNumber 是干什么用的?
  • 那么任务是创建几种排序方法(冒泡排序、梳状排序、鸡尾酒排序),然后绘制比较次数的图表。我还没有弄清楚如何跟踪该数组进行的比较次数。代码还没写完!
  • 刚刚更新了 compNumber,应该会给你比较的次数。
猜你喜欢
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 2012-07-05
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多