您的位置:首页 > 编程语言

[编程珠玑]交换相邻的不同大小的内存块[上]

2015-04-07 22:51 211 查看
核心:

X [j] = X [(j+ratdist)%size]

greatestCommonDivision(SubSize,Size)按radist步伐遍历数组元素

package neu.pearls.acrobatics;

public class MemoryExchange {
int block[];

public MemoryExchange(int size) {
block = new int[size];
}

public void setBlock(int block[]) {
this.block = block;
}

public void frontToBack(int rotdist) {
for (int i = 0; i < this
.getGreatestCommonDivisor(rotdist, block.length); i++) {
int t = block[i];
int j = i;
while (true) {
int k = j + rotdist;
if (k >= block.length) {
k -= block.length;
}
if (k == i) {
break;
}
block[j] = block[k];
j = k;
}
block[j] = t;

}
}

public void frontToBack2(int rotdist) {
if (rotdist > block.length || rotdist < 1) {
System.out.println("Error parameter:"+rotdist);
return;
}
for (int i = 0; i < this
.getGreatestCommonDivisor(rotdist, block.length); i++) {
int t = block[i];
int j = i;
while (true) {
int k = (j + rotdist) % block.length;
if (k == i) {
break;
}
block[j] = block[k];
j = k;
}
block[j] = t;

}
}

public int getGreatestCommonDivisor(int a, int b) {
while (a != b) {
if (a > b) {
a -= b;
} else {
b -= a;
}
}
return a;
}

public void show() {
for (int i : block) {
System.out.print(i + " ");
}
System.out.print("\n");
}

public static void main(String[] args) {
MemoryExchange me = new MemoryExchange(10);
int block[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
me.setBlock(block);
me.show();
// me.frontToBack(5);
me.frontToBack2(4);
me.show();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: