原题:请设计一个时间复杂度为O(n),空间复杂度不超过O(2)的算法,该算法将数组array[0:n-1]中所有元素依次循环右移k个位置。
算法思想:以一个元素为起点,用pre_temp记下其值,然后将其右边相距k位的元素与其交换,再移动到下一个k位,继续下去,直到回到起点。注注意回到起点并不一定表示移动
结束。显然每交换一次只有一个数据到位,所以程序中用 m 记下交换的次数,当 m=n 时表明所有数据到位。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define SIZE 10
void rightshift(int array[],int n,int k); //右移函数的原型声明
void main()
{
int array[SIZE],i,k;
for(i=0;i<SIZE;i++)
{
array[i]=rand()%100+1;
}
printf("Before shifed,the array's elements are :\n");
for(i=0;i<SIZE;i++)
{
printf("%d ",array[i]);
}
printf("please input a number:\n");
scanf("%d&