1. 程式人生 > 其它 >2020-12-29 關於陣列迴圈左移的問題(C++)

2020-12-29 關於陣列迴圈左移的問題(C++)

技術標籤:演算法分析

陣列迴圈左移

設將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; }

執行結果為:
1