P18.10
n个整数存放到一位数组R中,将R中的元素循环左移p个位置。
(1)算法的基本设计思想
创建另外一个数组_R,将排序后的元素放在_R中,然后利用_R更新R。
时空复杂度都贼鸡儿丢人。
(2)代码如下
#include <stdio.h>
void main()
{
int R[10];
int count;
int p;
scanf("%d", &p);
for (count = 0; count <= 9; count++)
{
R[count] = count;
}
int _R[10];
for (count = 0; count <= 9; count++)
{
if (count - p < 0)
_R[count + 10 - p] = R[count]; //注意数组元素顺序与下标的关系,我多加了一个一导致溢出
else
_R[count - p] = R[count];
}
for (count = 0; count <= 9; count++)
{
R[count] = _R[count];
printf("%d ", R[count]);
}
}
(3)复杂度
时间复杂度O(n)
空间复杂度O(n)
(4)改进
设置_R的大小为p而不是n,仅保存前p个元素,然后第p个之后的元素往前移,再把_R中的元素放在R之后。
时间复杂度O(n)
空间复杂度O