2011-11-07 34 views
-1

我有n個元素的陣列,並且我想要寫的函數來切換所述陣列之間的元件是這樣的:開關元件

1 2 3 ---> 3 1 2 ---> 2 3 1 ---> 1 2 3

我想不出一個簡單的算法來做到這一點。請幫忙。這不是功課。

+0

如果你只是旋轉陣列 - 爲什麼?只需提供一個接口即可訪問可以處理模塊索引的陣列。即可以從該陣列中的任何地方開始,並且在必要時回到零。 –

+0

爲什麼downvotes?這是一個完全合理的,如果有點簡單的問題。有想要旋轉陣列的正確理由。 –

回答

1

使用隊列而不是列表。排隊每個步驟的出隊物品。

另一種選擇是使用循環緩衝區。只要將數組保持原樣並有一個指向第一個元素的指針,就可以在每一步移動指針。分兩個階段讀取陣列。 1.從指針到結尾。 2.從開始到指針。

第三種方法是隻交換一個元素。

int tmp = arr[0]; 
for(int i = 0; i < arr.Length - 1; i++) 
{ 
    arr[i] = arr[i+1]; 
} 
arr[arr.Length - 1] = tmp; 
+0

我想你在這裏有一個錯誤。如果你的數組長度是2,你可以看到它。在這種情況下,循環內的代碼將永遠不會執行,並且你的數組在'arr [0]'和'arr [1]'中具有相同的值。你的循環控制應該是'我

+0

@JimMischel,你當然是對的。 –

0

你只是想旋轉數組?

// Rotate left 
    int temp = a[0]; 
    for (int i = 0; i < a.Length-1; ++i) 
    a[i] = a[i+1]; 
    a[a.Length-1] = temp; 

    // Rotate right 
    int temp = a[a.Length-1]; 
    for (int i = a.Length-1; i > 0; --i) 
    a[i] = a[i-1]; 
    a[0] = temp;