配列左シフト(c++)


タイトル
n(n>1)個の整数を一次元配列Rに格納する.時間と空間の両方で可能な限り効率的なアルゴリズムを設計し,Rに保存されたシーケンスを左にシフトp(0
アルゴリズム#アルゴリズム#
アルゴリズムは、Reverse()とLeftShift()の2つの関数で対応する機能を実現し、後者はReverse()関数を3回呼び出すことができる.
void Reverse(int R[],int left,int right)
{   	int k=left,j=right,tmp;    //k     left, j      right
	while(k<j)     //  R[k] R[j]
	{   	tmp=R[k];
		R[k]=R[j];
		R[j]=tmp;
		k++;   //k      
		j--;    //j      
	}
}
void LeftShift(int R[],int n,int p)   //     p   
{
	if(p>0&&p<n)
	{
		Reverse(R,0,n-1);  //       
		Reverse(R,0,n-p-1); //  n-p     
		Reverse(R,n-p,n-1); //  p     
	}
}