題目描述:數組
將n個整數存放到一維數組R中,將R中保存的序列循環左移p個位置(0<p<n),即將R中的數據由(X0,X1,....,Xn-1),變換爲(Xp,Xp+1,...Xn-1,X0,X1,...,Xp-1) .性能
分析:假設前p個元素所構成集合爲A,後n-p個元素爲B集合,則有AB等於((A的逆置)*(B的逆置))的逆置,具體證實目前還不清楚。總的來講就是進行三個逆置操做便可完成此過程。code
#include<cstdio> void Reverse(int R[],int from,int to){ int temp,i; for(i=0;i<(to-from+1)/2;i++){//循環要逆置的元素個數次 temp = R[from+i]; R[from+i] = R[to-i]; R[to-i] = temp; } } void Converse(int R[],int n,int p){ Reverse(R,0,p-1); Reverse(R,p,n); Reverse(R,0,n); } int a[10] = {0,1,2,3,4,5,6,7,8,9}; int main() { Converse(a,9,3); for(int i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); return 0; }
打印的結果爲:3,4,5,7,8,9,0,1,2.io
總結:但凡遇到相似的題目時,能夠想一想以逆置爲基礎,從而寫出較高性能。class