2020-12-29 關於陣列迴圈左移的問題(C++)
阿新 • • 發佈:2020-12-30
技術標籤:演算法分析
陣列迴圈左移
設將n(n>1)個整數存放到一維陣列R中,設計一個演算法,將R中的序列迴圈左移P(0<P<n)個位置,即將R中的資料由{x0,x2,…,xn-1}變換為{xP,xP+1,…,xn-1,x0,x1,…,xP-1}。
演算法分析:
可以先將R中的前P個元素逆置,再將剩下的元素進行逆置,最後將R中的所有元素再整體做一次逆置操作即可。
原始碼如下:
#include <iostream>
using namespace std;
int n;
void Reverse(int R[],int l,int r)
{
int i, j;
int temp;
for(i=l,j=r;i<j;++i,--j)
{
temp=R[i];
R[i]=R[j];
R[j]=temp;
}
id RCP(int R[],int n,int p)
{
if(p<=0||p>=n)
cout<<"ERROR"<<endl;
else
{
Reverse(R,0,p-1);
Reverse(R,p,n-1);
Reverse(R,0,n-1);
}
}
int main()
{
int L,i;
cin>>L;//左移L個元素
cin>> n;//一共n個元素
int *R;
R=(int *)malloc(sizeof(int)*n);
for(i=0;i<=n-1;i++)
cin>>R[i];
RCP(R,n,L);
for(i=0;i<=n-1;++i)
cout<<R[i]<<" ";
cout<<endl;
return 0;
}
執行結果為: