簡體   English   中英

哪種算法更有效地移位java數組中的每個元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM