【问题标题】:Sorting Implementation, same test case排序实现,相同的测试用例
【发布时间】:2016-07-24 17:33:47
【问题描述】:

我有类似的东西:(X - 不同的算法)

public class XAlgorithm{
 sort(List l){...}
}

在 testClass 中呈现如下:

ArrayList array = new ArrayList(...); // original array

public static void main(String[]args){

    AlgorithmsTest at = new AlgorithmsTest();
    at.testInsertSort();
    // when add at.array.printAll() - method printing all elements, there are no changes to original array what I want
    at.testBubbleSort();
    at.testSelectSort();
    at.testShellSort(); 

}



 testBubbleSort{
    ...
    ArrayList arrayBubble = new ArrayList(testBubble.sort(array));
    ...
}

问题是我的结果(由 System.currentTimeMilis() 测量的时间)在我为 ex 启动时不同。连续两次使用相同的算法,这也很奇怪,因为即使我在每个方法中都完成了复制(通过将所有新元素放入新数组然后对其进行操作)仍然工作错误。无论是哪一个,对于 main 中的第一个算法来说,时间总是最长的。

我什至控制了每个算法之间的数组(就像上面代码中的 //comment),这是正确的 - 没有对其进行更改,那么问题出在哪里:/?

提前致谢

【问题讨论】:

标签: java algorithm implementation


【解决方案1】:

即使您声明要制作数组的副本,但听起来您是在原地排序然后制作数组的副本。

因此,第一次将花费最长的时间,但所有后续运行都要做的工作更少,因为数组是“排序的”。

似乎还说您的排序算法存在错误,因此您在第一次排序时已经接近(或者它是正确的),但随后的排序发现了一个极端情况,导致在排序后的数组。我将分析我的排序方法并确保它们按您的预期工作。

【讨论】:

  • 我也一一测试了它们,它们工作正常。我无法捕捉到复制错误,因为当我通过在每个单一 sortAlgorithm 之后打印出所有元素来控制它时,使用复制和没有它时,数组没有变化,所以它让我认为原始数组被传递给下一个 sortAlgorithm。
  • 有了你给我们的,这就是我认为正在发生的事情,不知道还能告诉你什么。也许在 AlgorithmTest 中有一个方法可以为每次调用创建一个新数组,并确保数组每次都是新的(即使元素的顺序相同),因为非确定性排序算法不是排序算法。
  • (private ArrayList copyOfArray(ArrayList array){ Object[]copyArray = new Object[array.size()]; for(int i = 0; i < copyArray.length; i++){ copyArray[i] = new Car((Car)array.get(i)); } ArrayList copy = new ArrayList(copyArray); return copy; } 这种复制方法对吗?
猜你喜欢
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
相关资源
最近更新 更多