数据结构——数组(6)将数组后面m个数移动为前面的m个数

思路:
以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();
}

猜你喜欢

转载自blog.csdn.net/zhangying_496/article/details/81193679