练习递归和D&C,一个常见的问题似乎是转换数组:我
[a1,a2,a3..an,b1,b2,b3...bn]
解决[a1,b1,a2,b2,a3,b3...an,bn]
它如下(startA
是a
sstartB
的开始,是s的开始b
:
private static void shuffle(int[] a, int startA, int startB){
if(startA == startB)return;
int tmp = a[startB];
shift(a, startA + 1, startB);
a[startA + 1] = tmp;
shuffle(a, startA + 2, startB + 1);
}
private static void shift(int[] a, int start, int end) {
if(start >= end)return;
for(int i = end; i > start; i--){
a[i] = a[i - 1];
}
}
但我不确定运行时是什么。不是线性的吗?