欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将数组右移N个位

程序员文章站 2024-03-18 12:56:46
...

概述

实现一个数组右移:比如给定数组ABCDE,右移1位就是EABCD。

思路

这个算法其实比较简单,只需遍历一遍数组,将数组转移到指定位置即可。

源码

本文主要是以C、C++、QT为基础进行编程,运行前简单修改即可。测试入口函数为 void Test_Shift_Array()。

const static quint32 SARR_NUM = 10;//数组大小
static quint32 gSarr[SARR_NUM];//数组
static quint32 SHIFT_RIGHT_NUM = 3;//右移位数
void ShiftArray_Init()
{
    quint32 i = 0;
    QTime time = QTime::currentTime();

    qsrand(time.msec());
    while(i<SARR_NUM)
    {
        gSarr[i] = (quint32)qrand()%999 +1;
        i++;
    }
}
void ShiftArray_Output()
{
    quint32 i = 0;

    printf("\n");
    while(i<SARR_NUM)
    {
        printf("[%d]=%d ", i, gSarr[i]);
        i++;
    }
    printf("\n");
}
//abcde
//eabcd
//deabc
void ShiftArray_Shift(quint32 shiftNum)
{
    quint32 iValue,tiValue,index = 0,targetIndex,count=0;

    if(0 == shiftNum || SARR_NUM == shiftNum)
    {
        return;
    }

    iValue = gSarr[index];
    while(count<SARR_NUM)
    {
        targetIndex = index+shiftNum;
        if(targetIndex >= SARR_NUM)
        {
            targetIndex %= SARR_NUM;
        }

        tiValue = gSarr[targetIndex];
        gSarr[targetIndex] = iValue;
        index = targetIndex;
        iValue = tiValue;
        count++;
    }
}
//将数组右移
void Test_Shift_Array()
{
    ShiftArray_Init();
    ShiftArray_Output();
    ShiftArray_Shift(SHIFT_RIGHT_NUM);
    ShiftArray_Output();
}

运行结果

其中一次的运行结果为:
[0]=481 [1]=628 [2]=228 [3]=889 [4]=376 [5]=741 [6]=845 [7]=308 [8]=864 [9]=551
[0]=308 [1]=864 [2]=551 [3]=481 [4]=628 [5]=228 [6]=889 [7]=376 [8]=741 [9]=845

相关标签: 逻辑算法 算法