第 2 章 第 3 题 数组旋转问题 平移算法实现2

问题分析

  输入:目标数组,旋转位数。

  处理:将目标数组旋转指定的位数。

  约束:无

解答思路

  建立一个旋转 1 位的函数,这样,要旋转多少位就连续调用这个函数多少次即可。

代码实现

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 // 数组旋转函数
 6 void rotate(int *array, int n, int r);
 7 void rotate_1(int *array, int n);
 8 
 9 int main(void)
10 {
11     // 建立并初始化,输出测试数组。
12     int array[10];
13     int n=10;
14     for (int i=0; i<10; i++) {
15         array[i] = i+1;
16     }
17     cout << "目标数组:" << endl;
18     for (int i=0; i<10; i++) {
19         cout << array[i] << " ";
20     }
21     cout << endl;
22 
23     // 获取旋转位数
24     int r;
25     cout << "旋转位数:";
26     cin >> r;
27 
28     // 处理旋转位数
29     if (r<0) {
30         cout << "非法的旋转位数" << endl;
31         return 0;
32     }
33     else
34         r %= n;
35 
36     // 调用数组旋转函数
37     rotate(array, n, r);
38 
39     // 打印旋转结果
40     cout << endl << "旋转后的数组:" << endl;
41     for (int i=0; i<10; i++) {
42         cout << array[i] << " ";
43     }
44     cout << endl;
45 
46     return 0;
47 }
48     
49 void rotate(int *array, int n, int r) {
50     for (int i=0; i<r; i++) {
51         rotate_1(array, n);
52     }
53 }
54 
55 // 旋转 1 位
56 void rotate_1(int *array, int n) {
57     int tem = array[0];
58 
59     for (int i=0; i<n-1; i++) {
60         array[i] = array[i+1];
61     }
62     array[n-1] = tem;
63 }

运行测试

  

小结

  很显然,这样的程序时间复杂度很差

原文地址:https://www.cnblogs.com/scut-fm/p/3629391.html