[英]What algorithm is more efficient to shift every elements in a java array?
這是我做的第一個算法:
int tmp = null;
for (int i = arr.length-1; i > 0; i--){
tmp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = tmp;
}
這是我的計算機老師對我說的第二種算法:
int tmp = null;
for (int i = arr.length-1; i > 0; i--){
for(int j = 0; j < arr.length; j++){
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
幫助我了解哪個更有效。 在我的實驗中
System.currentTimeMillis();
這種方法使用具有100000個數據的數組,第一種算法更快,但是我的老師說第二種算法在具有各種功能的大型數據庫中會更快。 我知道一個LinkedList會很好,但是我想知道這個問題。
算法執行不同的操作 :
Input: [1, 2, 3, 4, 5]
First: [5, 1, 2, 3, 4]
Second: [3, 4, 1, 2, 5]
因此,關於它們的相對效率的任何討論都是無關緊要的,因為它們在功能上並不相同。
但是,僅就完成某件事所花費的時間而言,第一種算法是O(n)
,而第二種算法是O(n^2)
。 這樣,隨着輸入大小的增加,執行第一個所需的時間將比第二個更慢,因此您的老師是錯誤的。
請注意,第一個操作做了很多不必要的工作:它重復地將數組的最后一個元素一直交換到數組的開頭。 這樣,它可以像這樣更快地完成:
int tmp = arr[arr.length - 1];
for (int i = arr.length - 1; i > 0; --i) {
arr[i] = arr[i - 1];
}
arr[0] = tmp;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.