将数组右移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
上一篇: System.Drawing.Color的使用(转)
下一篇: 给文本去噪