应该破坏性的功能扩展他们的类?

时间:2013-11-26 09:15:40

标签: ruby algorithm oop

我正在实施CLRS中的一些内容,而partition()算法让我有点担心。暗示(从其中一致模糊的伪代码,但没有明确说明)partition应修改它传递的数组,并返回相关的标量值:

PARTITION(A, p, r)
1 x = A[r]
2 i = p -1
3 for j = p to r - 1
4 if A[j] <= x
5   i = i + 1
6   swap A[i], A[j] 
7 swap A[i+1], A[r]
8 return i + 1

这很容易在Ruby中放在一起,但我的问题是,因为它改变了数组而没有返回它,它是否应该像array.do_stuff!()这样的类方法?

irb(main):007:0> ary
=> [0, 3, 0, 2, 1, 2, 2, 2, 4, 4, 2]
irb(main):008:0> partition(ary,2,4)
=> 3
irb(main):009:0> ary
=> [0, 3, 0, 1, 2, 2, 2, 2, 4, 4, 2]

供参考,这是我的代码:

def partition(my_list, part_start, part_end, pivot = my_list[part_end])
# From CLRS p. 171
# In-place rearrangement of subarrays.


  sort_separator = part_start - 1
  for loop_ind in (part_start..part_end-1)
    if my_list[loop_ind] <= my_list[part_end]
      sort_separator += 1
      my_list[sort_separator],my_list[loop_ind] = 
        my_list[loop_ind],my_list[sort_separator]
    end
  end
  my_list[sort_separator+1],my_list[part_end] = 
    my_list[part_end],my_list[sort_separator+1]

  return(sort_separator+1)
end

0 个答案:

没有答案