Nsfocus笔试题:编写程序实现长度为M的数组,将该数组的前面N个数字循环右移到数组的末尾,例如:长度M=8的数组a[M]={1,2,3,4,5,6,7,8},要求移动前面N=3个数字到末尾,移动后的数组为a[M]={4,5,6,7,8,1,2,3},要求时间复杂度和空间复杂度尽可能低。
//算法来自于July编写的《程序员编程艺术》
#include <stdio.h>
#include <string.h>
#include <iostream.h>
char *swap(char *start,char *end)
{
chartemp;
char*ptemp=start;
while(start!=NULL&end!=NULL&start<end)
{
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
returnptemp;
}
char* rightMove(char *s,int pos)
{
intlen=strlen(s);
swap(s,s+pos-1);//前半部分交换;
swap(s+pos,s+len-1);//后半部分交换;
swap(s,s+len-1);//整体交换;
returns;
}
void main()
{
chars[]="12345678";
puts(rightMove(s,4));
}