On 6/29/06, James Edward Gray II <james / grayproductions.net> wrote:

> #!/usr/local/bin/ruby -w
>
> def sort(array)
>    recursive_sort(array, [])
> end
>
> def recursive_sort(unsorted, sorted)
>    # find the lowest element
>    lowest = nil
>    unsorted.each do |item|

This line (following) is the one that hung me.

>      if lowest == nil || item < lowest

After many iterations of various attempts, embarassingly I picked the
worst and most incomplete to post. I get it now somewhat, though the
'aha!' moment is still not hitting.  I'll attempt to analyze.  Your
looking for the item that is smaller (or less then) then nil.  How can
any of the items be smaller then nil ?  I know I'm missing something
here, but my thoughts were locked into comparing item < item, This is
why one of the attempts made went like this :

unsorted.each do |x|
unsorted.reverse_each do |y|
      if x < y
      ............

>        lowest = item
>      end
>    end

Yep, I'm good at push.

>    # add it to our sorted list
>    sorted.push(lowest)


This was explained previously to me
>    # make a new unsorted list, minus the low guy
>    new_unsorted = [ ]
>    added        = false
>    unsorted.each do |item|

item == lowest meaning that there was already something assigned to lowest ?

>      if added == false and item == lowest
>        added = true
>      else
>        new_unsorted.push(item)
>      end
>    end
>
>    # return sorted list if we are done, or recurse to keep sorting
>    if new_unsorted.size == 0
>      sorted
>    else
>      recursive_sort(new_unsorted, sorted)
>    end
> end
>
> list = ['zeta', 'beta', 'alpha', 'beta']
> puts sort(list)
>
> __END__
>
> Hope that helps.
>
> James Edward Gray II
>
It helps yes, thank you very much.  Wish I would have came up with it
myself.  I'll need to find a tougher sort to attempt at some point.
Meanwhile Chris is not letting up and with 4 more chapters to go I
have my work cut out for me.

Stuart