这个问题类似于(link),但不完全是我要找的。这是我在下面写的一个选择类型,它是用Java编写的。
public void sort() {
int smallIndex;
for(int i = 0; i < arr.length; i++) {
smallIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[smallIndex]) {
smallIndex = j;
}
}
if(i < smallIndex)
swap(i, smallIndex);
}
}
这是我的交换方法。
public void swap(int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
我在0到999之间填充了一个包含50,000个随机元素的数组。该方法对它进行了排序。每次执行大约1400毫秒(1300-1500)。
这是我正在看的一本书的选择。
public void sortBook() {
for(int i = 0; i < arr.length; i++) {
int minPos = minimumPosition(i);
swap(minPos, i);
}
}
这是minimumPosition方法。
public int minimumPosition(int from) {
int minPos = from;
for(int i = from + 1; i < arr.length; i++) {
if(arr[i] < arr[minPos]) {
minPos = i;
}
}
return minPos;
}
交换方法是我从上面使用的方法。对于50,000个元素,范围为0 - 999,我一直在执行大约700毫秒的执行时间。
我的问题是为什么sort()的执行时间几乎是sortBook()的两倍。我已经在较小的数组上逐步完成它们,它们似乎采取相同的步骤来执行相同的操作,sort()有时只进行交换,sortBook()每次都交换。对我的新手来说,他们看起来几乎完全一样。
我不明白为什么sort()大约是sortBook()的两倍。任何人都有任何见解,为什么会这样?
答案 0 :(得分:0)
我可以在您的代码库中看到的额外比较步骤之一是
join
请你这一步,看看你是否得到了相同的结果。
答案 1 :(得分:0)
首先,没有任何数学原因你的数学原理应该比书中的慢,它们表面上是相同的。 当我把它们互相对抗时,我给你的约400毫秒和书的450分钟。我认为问题来自你的时间,通常变化可能是因为cpu在运行时做了其他的事情,所以我看到任何差异我看到错误分析下的分散。即使你的标识符的时差几乎毫无意义,在这个尺度上它与时间的差异无关。此外,如果效率是非常重要的,那么尝试实现heapSort以获得有趣的挑战,我建议使用c或c ++,这样可以提供更好的性能。玩得开心!