思路:
以a[]={1,2,3,4,5,6,7,8,9,10}为例,m=5。即把前后分别5个数换位置
①将前面5个数的顺序颠倒,得:5,4,3,2,1,6,7,8,9,10
②将后面5个数的顺序颠倒,得:5,4,3,2,1,10,9,8,7,6
③将整个数组的顺序颠倒,得: 6,7,8,9,10,1,2,3,4,5
使用递归法即可实现。
void Diaotou(int *a,int start,int end)
{
while(start<end)
{
swap(a[start],a[end]);
start++;
end--;
}
}
void fDiaotou(int *a,int len,int m)
{
Diaotou(a,0,m-1);
Diaotou(a,m,len-1);
Diaotou(a,0,len-1);
}
void swap(int&a,int &b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10}; //比如,这里,5个数,则要求这5个数字在1~4之间。否则,找不到。
int length=sizeof(a)/sizeof(a[0]);
int m=5;
fDiaotou(a,length,m);
for (int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
getchar();
}