要求:使用递归,数组的大小是偶数。
例如:
0 ... 1 ... 2 ... 3 ... 4 ... 5(指数顺序)
a ... b ... c ... d ... e ... f(排列前的数组)
a ... c ... e ... b ... d ... f(安排后的数组)
0 ...... 1 ...... 2 ...... 3 ...... 4 ...... 5 ...... 6 .... ..7(指数顺序)
a1 .... b1 .... a2 .... b2 .... a3 .... b3 .... a4 .... b4(排列前排列)
a1 .... a2 .... a3 .... a4 .... b1 .... b2 .... b3 .... b4(排列后的数组)
如果我们不关心优化,问题看起来容易解决,我们可以使用临时数组或使用递归结合循环来移动项目...我认为这种方式不是最好的解决方案....我试着用递归与交换操作相结合,不使用循环...但我失败了。
希望有人建议我解决问题的想法,谢谢你的帮助
答案 0 :(得分:0)
首先,让我提一下,最佳解决方案取决于数组的大小(占用了多少元素),假设在内存中这意味着数组大小受到限制,您可以通过快速循环获得复杂性O(n)就像这样。令数组为N,N中的元素数为x。
接受数组插入和查找O(1)。
操作
你可以选择运行并发for循环,这样可以加快速度,但我认为这超出了你想要的范围。
答案 1 :(得分:0)
不要认为最佳解决方案是递归,但如果它是问题描述的一部分,并且如果我保证数组的大小是2的幂,那么我将应用分而治之
简单的情况是问题的大小是2.问题已经解决了。解决了2个大小为2的分区后,必须将它们组合在一个大小为4的分区中。例如
0 ...... 1 ...... 2 ...... 3 ...... 4 ...... 5 ...... 6 .... ..7(指数顺序)
a1 .... b1 .... a2 .... b2 .... a3 .... b3 .... a4 .... b4(排列前排列)
a1 .... a2 .... b1 .... b2 .... a3 .... a4 .... b3 .... b4(组合大小为2的分区后的数组)
完成组合大小为2的分区后,组合大小为4的分区。
a1 .... a2 .... a3 .... a4 .... b1 .... b2 .... b3 .... b4(组合大小为2的分区后的数组)
组合2个大小为N的分区,意味着交换左侧分区右侧的N / 2项,右侧分区左侧有N / 2项。这可以通过一个简单的循环来完成。
希望这些想法可以帮助你完成任务。