四元数组旋转_数组元素的左右旋转

我们定义一组数组元素,例如:1 2 3 4 5 6

右旋一位:2 3 4 5 6 1

左旋一位:6 1 2 3 4 5

如果右旋一位,我们会想到把数组元素整体右旋一位,本来的首元素放到最后一位,之后的每一位都向左移动一位。我们可以先把首元素取出标记一下tmp=arr[0],之后的每一位都向前移动一位,arr[i-]=arr[i],最后把tmp放到最后一位。

同理,右旋n位与右旋一位原理相同,不同的就是在一个循环中每旋一次,n--,直到为零。

代码:#include 

void RVast(int arr[],int len,int n)

{

int i;

int tmp;

while(n)

{

tmp=arr[0];

for(i=1;i

{

arr[i-1]=arr[i];

}

arr[i-1]=tmp;

n--;

}

}

int main()

{

int arr[]={1,2,3,4,5,6};

int sz=sizeof(arr)/sizeof(arr[0]);

int n=3;

int i;

RVast(arr,sz,n);

for(i=0;i

{

printf("%d ",arr[i]);

}

return 0;

}

左旋一位或者n位原理与右旋类似,左旋一位是将整体向左旋转一位,最后一位元素会旋到首地址,将最后一位元素取出做个标记tmp=arr[len-1];它前面的每一位都向后移动一位,最后将它放到首地址上。

代码:#include 

void LVest(int arr[],int len ,int i)

{

int n=0;

int tmp;

while (i)

{

tmp=arr[len-1];

for(n=len-1;n>0;n--)

{

arr[n]=arr[n-1];

}

arr[0]=tmp;

i--;

}

}

int main()

{

int arr[]={1,2,3,4,5,6};

int sz=sizeof(arr)/sizeof(arr[0]);

int i=2;

LVest(arr,sz,i);

for(i=0;i

{

printf("%d",arr[i]);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值