void swap(int * const al, int i, int j)
{
if (NULL == al) return ;
al[i] ^= al[j];
al[j] ^= al[i];
al[i] ^= al[j];
return ;
}
/**
* @brief 对数组al[s, e-1]进行反转
*
* */
void reverse(int *al, int s, int e)
{
if (NULL == al || s > e-1) return ;
--e;
while (s < e) {
swap(al, s++, e--);
}
return ;
}
/**
* @brief 对al[s, e-1]进行循环右移step位
* */
void rotateRight(int * al, int s, int e, int step)
{
if (NULL == al || s > e-1) return ;
step %= e - s;
if (step == 0) return ;
reverse(al, s, e - step);
reverse(al, e - step, e);
reverse(al, s, e);
return ;
}
void rotateLeft(int * al, int s, int e, int step)
{
if (NULL == al || s > e-1) return ;
step %= e - s;
if (step == 0) return ;
reverse(al, s, s + step);
reverse(al, s + step, e);
reverse(al, s, e);
return ;
}