数组循环右移

Posted bian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组循环右移相关的知识,希望对你有一定的参考价值。

时间复杂度o(n2)

1234abcd -> 4321abcd -> 4321dcba -> abcd1234

 1 int change(int *a, int k)
 2 {
 3         int i, tmp;
 4         k %= LEN;
 5         while (k-- > 0) {
 6                 tmp = a[LEN - 1];
 7                 for (i = LEN - 1; i > 0; i--) {
 8                         a[i] = a[i - 1];
 9                 }
10                 a[0] = tmp;
11         }
12         
13         return 0;
14 }

时间复杂度o(n)

 1 int reverse(int *a, int start, int end)
 2 {
 3         int tmp;
 4         for (; start < end; start++, end--) {
 5                 tmp = a[end];
 6                 a[end] = a[start];
 7                 a[start] = tmp;
 8         }
 9         return 0;
10 }
11 
12 int change1(int *a, int k)
13 {
14         k %= LEN;
15         reverse(a, 0, LEN - k - 1);
16         reverse(a, LEN - k, LEN - 1);
17         reverse(a, 0, LEN - 1);
18         return 0;
19 }

 

以上是关于数组循环右移的主要内容,如果未能解决你的问题,请参考以下文章

1008. 数组元素循环右移问题

B1008 数组元素循环右移问题 (20分)

PAT乙级 1008. 数组元素循环右移问题 (20)

自测-3 数组元素循环右移问题 (20 分)—— 数据结构-起步能力自测题

PAT 乙级 水题 1008. 数组元素循环右移问题 (20)

JAVA1008 数组元素循环右移问题 (20分) PAT乙级 PAT (Basic Level) Practice (中文)