数组循环移位
习题:将一个含有n个元素的数组向右循环移动k位。
方法1
Create:
a[0]=1;a[1]=2;a[2]=3;a[3]=4;
b[0]=0
step=2
n=array_length_1d(a)
for (i=0; i{ b[(i+step) mod n] = a[i]}Draw:for (i=0; i{ draw_text(0,i*20,b[i])}开另一个大小一样的数组B,遍历一下,令B[(i + m) % n] = A[i],再将B的内容写回到A即可。这个方法的时间复杂度为O(N),空间复杂度也为O(N)。方法2Create:a[0]=1;a[1]=2;a[2]=3;a[3]=4;step=2n=array_length_1d(a)for (i=0; i{ tempt = a[n-1] for (j=n-1; j>0; j-=1) { a[j]=a[j-1]; } a[0]=tempt}Draw:for (i=0; i{ draw_text(0,i*20,a[i])}这个办法是用两个循环来控制,内循环每次向右移动一位,外循环则用来限制移动的位数。算法需要执行 n * step次,时间复杂度是O( N2 )。
| 留言与评论(共有 0 条评论) |