2-2数组元素循环右移问题

来源:互联网 发布:php是世界上最美的语言 编辑:程序博客网 时间:2024/06/09 13:44

【题目】有一个整数数组,现要求实现这个整数数组的循环右移。如:1,2,3,4,5 则循环右移两位后结果是:4,5,1,2,3。

//这个做法主要是执行3次倒序,相比于执行N次M个数右移一位效率高一点点,但是也不是最好的做法。相对好理解一点。#include <stdio.h>#include <stdlib.h>#define swap(a,b) a^=b,b^=a,a^=bvoid RightShift(int *Array,int N,int M){    int i,j;     if(M > 0 && M <N){        for (i = 0,j = N-1;i < j; i++,j--)//全部倒序            swap(Array[i],Array[j]);        for (i = 0,j = M-1;i < j; i++,j--)//前M个数倒序            swap(Array[i],Array[j]);        for (i = M,j = N-1;i < j; i++,j--)//后N-M个数倒序            swap(Array[i],Array[j]);     }}int main(){    int number[100],M,N;    int i;    scanf("%d%d",&N,&M);    for (i = 0;i < N ;i++)        scanf("%d",&number[i]);    M %= N;       //M>N时转换为等价的小于N的数    RightShift(number,N,M);    for(i = 0 ;i < N - 1;i++)        printf("%d ",number[i]);    printf("%d\n",number[N-1]);    return 0;}
0 0