我从Java开始,但是我想到了一个巨大的区别:为什么对数组的引用比将值赋给变量然后调用变量差得多? (如果这不是我的代码的问题,那么我的代码有什么问题?)
我尝试用Java实现选择排序,在这里向您展示时间。
在我看来,数组就像一个符号变量列表,所以我不知道直接调用数组项有多糟。
这是代码(下面的时间)
public static int[] selectionSort(int ... numbers) {
int pos, value;
int[] result = numbers.clone();
for (int i = 0; i < result.length - 1; i++) {
value = result[i];
pos = i;
for (int j = i + 1; j < result.length; j++) {
if (result[j] < value) {
value = result[j];
pos = j;
}
}
result[pos] = result[i];
result[i] = value;
}
return result;
}
public static int[] selectionSortWorse(int ... numbers) {
int pos, value;
int[] result = numbers.clone();
for (int i = 0; i < result.length - 1; i++) {
pos = i;
for (int j = i + 1; j < result.length; j++) {
if (result[j] < result[pos]) {
pos = j;
}
}
value = result[pos];
result[pos] = result[i];
result[i] = value;
}
return result;
}
selectionSort
与selectionSortWorse
的时间比较(平均10)答案 0 :(得分:2)
在访问数组元素(例如result[pos]
)时,与访问直接变量(例如value
)相比,存在额外的开销,至少还要发生另外2件事:
pos >= 0 && pos < result.length