编程之美--数组循环移位

解法一  每次移动移位,然后循环调用K次:

void shift(int *A,int n,int k){
	for(int i=0;i<k;i++){
		int last=A[n-1];
		for(int j=n-1;j<0;j--)
			A[j]=A[j-1];
		A[0]=last;
	}
}

解法二  优化循环次数,即求K对n的余数:

void shift(int *A,int n,int k){
	k%=n;
	for(int i=0;i<k;i++){
		int last=A[n-1];
		for(int j=n-1;j<0;j--)
			A[j]=A[j-1];
		A[0]=last;
	}
}

解法三  使用逆转,方法很巧妙:

void reverse(int *A,int start,int end){
	for(;start<end;start++,end--){
		int temp=A[start];
		A[start]=A[end];
		A[end]=temp;
	}
}

void shift(int *A,int n,int k){
	k%=n;
	reverse(A,0,n-k-1);
	reverse(A,n-k,n-1);
	reverse(A,0,n-1);
}

    原文作者:taihejin
    原文地址: https://blog.csdn.net/taihejin/article/details/18044811
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞