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-1return ;
    
--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-1return ;
    step 
%= e - s;
    
if (step == 0return ;
    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-1return ;
    step 
%= e - s;
    
if (step == 0return ;
    reverse(al, s, s 
+ step);
    reverse(al, s 
+ step, e);
    reverse(al, s, e);
    
return ;
}