C语言实现数组元素的循环移动

C/C++ 2013年11月24日 ,

 

visio-braces-3有学习《Windows程序设计》的过程中,对C语言进行了复习,用数组实现循环右移。

问题提出

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。循环右移,如上图所示。

问题分析

为了减少时间及空间复杂度,尝试只进行一次循环且尽可能少使用存储空间c-array-rotate-1

根据一般实现过程采用如下做法。

算法实现

根据问题分析中的流程进行实现,下面只进行循环右移的算法实现,其他移动方法可以根据现有进行修改实现。

// Author: http://furzoom.com/
// num is data array
void rotateR(int * num, int m, int n)
{
    int index,temp,i;
    index = 0;
    temp = num[index];

    for(i = 0;i<n-1;i++)
    {
        num[index] = num[(index+m)%n];
        index = (index +m)%n;
    }

    num[index] = temp;
}//end of rotateR by furzoom

转载请注明,本文地址:http://furzoom.com/c-array-rotate/

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《C语言实现数组元素的循环移动》
日志链接:http://furzoom.com/c-array-rotate/
博客名称:枫竹梦

【上一篇】
【下一篇】

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部