核心算法:分别倒转前n-m个数和后m个数,然后倒转整个数组。
#include
void reverse(int*a,int i,int j)
{
int tmp;
while(i < j)
{
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
i++;
j--;
}
}
int main()
{
int a[2000],m,i,n;
char ch;
//输入部分,在第一行输入数组,第二行输入m
for(i=0;i<2000;i++)
{
scanf("%d%c",a[i],ch);
if(ch == '\n')
break;
}
scanf("%d",m);
n = i + 1; //此时,n保存数组中元素的个数
reverse(a,0,n-m-1);
reverse(a,n-m,n-1);
reverse(a,0,n-1);
for(i=0;iprintf("%d ",a[i]);
return 0;
} 比起下面的算法,我的算法时间复杂度为n,空间复杂度为1.空间上优于他。