【问题标题】:Comparing two (almost identical) implementations of Insertion Sort; one of them fails比较插入排序的两个(几乎相同)实现;其中一个失败了
【发布时间】:2016-12-31 17:41:58
【问题描述】:

基本上我在 Non-working 实现中将n 替换为aData[i]。我是否遗漏了一些根本错误的东西?第二个实现在相同的测试数据上失败。

通过实现:

static long[] sort(long[] aData) {
    for (int i = 1; i < aData.length; i++) {
        long n = aData[i];

        int j = i - 1;
        while (j >= 0 && aData[j] > n) {
            aData[j + 1] = aData[j];
            j--;
        }
        aData[j + 1] = n;
    }
    return aData;
}

实施失败:

static long[] sort(long[] aData) {
    for (int i = 1; i < aData.length; i++) {
        int j = i - 1;
        while (j >= 0 && aData[j] > aData[i]) {
            aData[j + 1] = aData[j];
            j--;
        }
        aData[j + 1] = aData[i];
    }
    return aData;
}

【问题讨论】:

  • 这个问题被否决了,没有说明原因。良好的 SO 看门人。
  • 这个问题是在没有阅读和理解本网站工作方式的情况下发布的。请访问help center 并阅读How to Ask。发布代码并实际上说“请为我调试”被认为是题外话。
  • 老实说,几乎 95% 的时间我问一个问题,它被标记为离题。我认真避免就 SO 提出任何问题,因为它被某人或其他人标记为 OFF-TOPICFEAR。我通常非常小心。这个问题在 CR 上被否决,之后我来到 SO,在这里被否决。老实说,我不知道在哪里发布问题,因为关于 SO 的 GOOD 问题的定义非常非常主观。我希望你明白我在说什么。
  • 我同意人们对它投反对票可能有点苛刻,但我认为一个关键原因只是说“不工作”,而没有告诉我们到底是什么在职的。是语法错误吗?是对第一个排序,然后没有其他排序吗?是吗...?没有这个,我看这个问题,我不知道你对我们有什么期望,其他人可能也这样做了。
  • @BenHare - 这是建设性的批评。

标签: java insertion-sort


【解决方案1】:

在 while 循环的第一次迭代中,j + 1 == i。所以当你写aData[j + 1] = aData[j]时,你在循环中改变了aData[i]的值。

在初始版本中,n 在整个操作过程中保持不变。另请注意,使用 aData[i] 而不是 n 不太可能提高性能(如果有的话,它可能会更慢)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多