Yo,

don't fret, I grew up on Pascal, and I was happy to code 1-2 years Ruby 
in Pascal style, then slowly came iterators, I unlearned the using of 
explicit return values (and let Ruby do it), and now I quite easily read 
code. Writing however is harder, I can write functionally good code, but 
I'm always in doubt I have written it the best - Ruby - way.

There is always something to learn, now I battle with metaclasses (not 
that I see any real word usage, but it is interesting as a language 
construct). Fanatics can go deeper, there is a book on the Ruby VM and 
the virtual machine language, and finally there is the C source, yikes!

As for sorting methods, here is a visual aid: 
http://www.sorting-algorithms.com/

And visit Hackerrank, you can solve algorithmic problems there, and they 
have a specific sorting lesson (teaching insertion sort and counting 
sort) and they take you step-by-step through the solution phases: 
https://www.hackerrank.com/categories/algorithms/sorting

Looking at the code you linked, this is some kind of insertion sort. But 
you are trying understand at least 3 problems at the same time: 1. the 
sorting method, 2. the recursive process, 3. the optimized code.

I say choose one, and concentrate on it. Write inefficient, ugly code, 
that does the job and you understand it well (the Hackerrank insertion 
sort would be a good start). If you don't understand #each and the 
enumerators yet, don't mix it into the problem, fall back to loops.
Then refactor, without losing functionality. And I suggest change the 
strings to numbers, it will be much easier to see which is greater than 
what.

As for your third question, what you might lack (as of now) is 
algorithmic thinking, which does not depend on any language, but that 
will come with practice (think of as a lot of "ahh! (facepalm)" along 
the way).
That is exactly why I registered to sites like Hackerrank, Code Chef, 
Project Euler, and some Codility.

-- 
Posted via http://www.ruby-forum.com/.