【发布时间】:2014-09-30 03:06:41
【问题描述】:
我正在做一个算法练习,它要求重新排列一个整数数组,将所有偶值元素放在奇值元素之前。
想了想,想出了如下伪代码:
int[] Rearrange(int [] arr)
{
if arr.length=1
return arr;
if arr[0] is even
return arr[0] followed by Rearrange(arr.subarray(1,arr.length))
else
return Rearrange(arr.subarray(1,arr.length)) followed by arr[0]
}
我有点担心我上面提出的解决方案,因为我需要在每个递归周期中进行复制操作,这很昂贵。请高手指教,谢谢!
【问题讨论】:
-
你的解决方案永远不会递归。
-
@BobJarvis 这是伪代码,所以我在做假设,但它确实看起来像是递归给我。 Rearrange 基金在第二个 if 语句的两个分支中调用自己:首先如果 arr[0] 是偶数,在 else 情况下也是如此。这是对递归的不好使用。
-
@DuncanC - 自从我发表我的原始评论以来,该问题已被编辑以显示对
Rearrange的调用。
标签: arrays algorithm recursion