“`” 参考回答:
洗牌问题:有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。
<pre><code>void PerfectShuffle(int *A,int n){
if(n <= 1){
return;
}//if
//
int size = 2*n;
int index,count;
for(int i = n;i < size;++i){
</code></pre>
// 交换个数
count = n – (i – n) – 1;
// 待交换
<pre><code>index = i;
for(int j = 1;j <= count;++j){
swap(A[index],A[i-j]);
index = i – j;
}//for
}//for
}
};
</code></pre>
可以就数组的类型,可以是int型的,浮点型的,还可以是大数类型,负数,进行测试。
<pre><code> "“`
Was this helpful?
0 /
0