Hi, Sam 
This is a good exercise! When I first tried to sort an array, it hurt my
brain (literally, it was physically painful) I had to look at a solution
and draw it out on paper to be able to understand it. So don't sweat it,
just realize you have to be dedicated 
Now, when you're starting out, you'll have to deal with people using things
you haven't learned about yet. That's unfortunate, but it's a just a fact.
Don't be put off by them, try to understand what they're doing, even if you
don't understand how they're doing it. You'll learn the how in time, and
the ability to understand the "what" without the "how" will be very
powerful.
Now, in the case of hashes, they're just just a collection, like arrays,
but the difference is that you access them by some arbitrary object (called
a key, usually a symbol or a string), rather than an integer index.
I advocate playing around with some cards, pay attention to yourself when
you sort them. What do you do? Can you articulate those steps so that if
you described it to a human, they could understand them? Can you then take
those steps and write them in code so that a machine can understand them?
Anyway, here is one I just wrote. I try to use very few array methods, and
whenever I think something might be confusing (ie "why is he doing that?")
I pull it out and make it into a method whose name explains why I'm doing
it. So if you read from the bottom, the implementation should be pretty
obvious "for each element, insert it in sorted order into a new array"
That's pretty straightforward
Of course, now we have to figure out what
"insert it in sorted order" means, so go up to the next method, see if you
can understand how it works. If you understand each of the pieces, you
understand the whole. You can also feel free to pull out the method calls
and inline them if you think that will be more helpful for you.
def can_access?(array, index)
index < array.size
end
def make_a_hole(array, hole_index)
current_index = array.size
while hole_index < current_index
array[current_index] = array[current_index-1]
current_index -= 1
end
end
def insert(array, add_index, to_add)
make_a_hole(array, add_index)
array[add_index] = to_add
end
def ordered_insert(sorted_array, to_add)
add_index = 0
while can_access?(sorted_array, add_index) && sorted_array[add_index] <
to_add
add_index += 1
end
insert sorted_array, add_index, to_add
end
def sort(array)
sorted =
array.each do |to_add|
ordered_insert sorted, to_add
end
sorted
end
a = [1, 4, 2, 5, 3]
sort a # => [1, 2, 3, 4, 5]
a # => [1, 4, 2, 5, 3]
···
On Thu, Dec 8, 2011 at 8:10 PM, Samuel Mensah <sasogeek@yahoo.com> wrote:
I have been reading Chris Pine's book for a while now and I'm stuck at
the chapter where I have to write my own sorting method. All the code I
tried don't work and when I searched for sorting algorithms and programs
in ruby, ALL the source code I had a look at had a couple of elements in
it that the book I'm reading hasn't taught yet...I think something is
missing... You guys are masters of this language and have already learnt
it so I'd want to know how you learnt it and what books you read and if
they are downloadable.Downloadable ebooks would be of great help to me,
thank you. 
--
Posted via http://www.ruby-forum.com/\.