圓形陣列旋轉的線性複雜性實現是否正確?算法 - 圓形陣列旋轉
N =元素數目 K =轉
int write_to = 0;
int copy_current = 0;
int copy_final = a[0];
int rotation = k;
int position = 0;
for (int i = 0; i < n; i++) {
write_to = (position + rotation) % n;
copy_current = a[write_to];
a[write_to] = copy_final;
position = write_to;
copy_final = copy_current;
}
好,複雜度是線性的肯定。但是如果你希望通過'#rotation'位置來旋轉數組中的值,傳統上將其描述爲循環旋轉,當這不是最終結果時,你會感到驚訝。 –
http://stackoverflow.com/questions/11893053/circular-left-shift-of-an-array-by-n-positions-in-java – vadim
@vadim:對這個問題的接受答案肯定是正確的,但更漂亮解決方法是:1.反轉第k個元素。 2.反轉其餘的元素。 3.反轉整個陣列。 (所有反轉都在原地。) – rici