*Don't forget to use Git to save your projects!*

Sorting algorithms are some of the earliest that you typically get exposed to in Computer Science. It may not be immediately obvious how important they are, but it shouldn't be hard to think of some examples where your computer needs to sort some massive datasets during everyday operations.

One of the simpler (but more processor-intensive) ways of sorting a group of items in an array is **bubble sort**, where each element is compared to the one next to it and they are swapped if the one on the left is larger than the one on the right. This continues until the array is eventually sorted.

Check out this video from Harvard's CS50x on Bubble Sort.

There's also an entry on Bubble Sort on Wikipedia that's worth taking a look at.

Build a method

`#bubble_sort`

that takes an array and returns a sorted array. It must use the bubble sort methodology (using`#sort`

would be pretty pointless, wouldn't it?).`> bubble_sort([4,3,78,2,0,2]) => [0,2,2,3,4,78]`

Now create a similar method called

`#bubble_sort_by`

which sorts an array but accepts a block. The block should take two arguments which represent the two elements currently being compared. Expect that the block's return will be similar to the spaceship operator you learned about before -- if the result of the block is negative, the element on the left is "smaller" than the element on the right.`0`

means they are equal. A positive result means the left element is greater. Use this to sort your array.`> bubble_sort_by(["hi","hello","hey"]) do |left,right| > left.length - right.length > end => ["hi", "hey", "hello"]`

*Submit a link to the github repo with your files in it here with a pull request. Please include your partner's github handle somewhere in the description if they would like attribution.*

- Add your solution below this line!
- Nicolas Amaya's solution
- John Phelps's solution
- Josh Vogel's solution
- Austin Norman's solution
- Jib's Solution(NuclearMachine)
- Chad Kreutzer's solution
- Stefan P's Solution
- Raiko's Solution
- Jamie's solution
- Chris Oldakowski's solution
- Marina Sergeyeva's solution
- Afshin M. afshinator's solution
- Donald's solution
- Alan Russell's solution
- Mazin Power's solution
- Sessl's solution
- Tommy Noe's solution
- Michael Alexander's solution
- Adrian Badarau's solution
- James MacIvor's solution
- Vincent's solution
- Roman's Solution
- Aleksandar's solution
- Lara Finnegan's solution
- John Quarles' solution
- Jack Nguyen's solution
- Vidul's solution
- Maggie Baker's solution
- Hunter Ducharme's solution
- Artur Janik's solution
- Tyler Travers' solution
- Kate McFaul's solution
- Dominik Stodolny's solution
- hiendinhngoc's solution
- Chris Dziewa's solution
- Sami Bashraheel's solution
- Josh Naughton's solution
- Jason Matthews' solution
- Nikola Čvorović's solution
- Ali Ayoub's solution
- JrodManU's solution
- poctek's solution
- Greg Park's solution
- Sasi kala's solution
- Kevin Mulhern's solution
- Jeremy Mauzy's solution
- LongPotato's solution
- Dorian Iacobescu's solution
- Sam Padrul's solution
- Eleanor Weigert's solution
- Lyman Wong's solution
- omokoro's solution
- Andrej Dragojevic's solution
- Brann James' solution
- Eduardo Frias' solution
- Antonio Augusto's solution
- Ryan Jordan's solution
- Josh Klein's solution
- ll14m4n's solution
- AtActionParks's solution
- Matias Pan's solution
- Mark Viola's solution
- Bhupendra Singh's solution
- Dan Hoying's solution
- Joe Balsamo's solution
- Cody Gipson's solution
- Glenn Crosby's solution
- Raycotek's solution
- M. Edgar Joel's solution
- Miguel Oliveira's solution
- Xavier Reid's solution
- Gb69010p's solution
- Alex Chen's solution
- Tarek Ahmed's solution
- Aleksandre Clapin-Pepin's solution
- John Tobillo's Solution
- PiotrAleksander's solution
- Berin Larson's solution
- Jason Symons' solution
- AnthonyL's solution
- Angus Dobson's solution
- Ashley Lewis's solution
- Panashe Fundira's solution
- pwdd's solution
- Paweł Cichoń solution
- Noah Prescott's solution
- Florian Mainguy's solution
- Aviv levinsky's solution
- Alex Tsiras' solution
- Scott Bobbitt's solution
- Maciej Panasiewicz's solution
- Adrian Manteza's solution
- Simon Kraus' solution
- Robin van de Griend's solution
- Giorgos Mitsis's solution
- Theoderik Trajanson's solution
- Sander Schepens's solution
- srashidi's solution
- Eric's solution
- Dave Meister's solution
- Andrew Park's solution
- Austin Mason's solution
- James Brooks's solution
- arocketman's solution
- Ricardo Villegas' solution
- cdouglass's solution
- Skye Free's solution
- Corey Kazaks's solution
- Dominik Chomicki's solution
- Matt Leininger's solution
- Miguel Herrera's solution
- Maia Petee's solution
- Peuchen's solution
- Andrew Johnson's solution
- Bartlomiej Lazarski's solution
- Francisco Carlos's solution
- Luke Walker's solution
- Noobling's solution
- Max Gallant's solution
- Jean Merlet's solution
- parhaml's solution
- Zac Conner's solution
- John Martinez's solution
- Vivek Kumar's solution
- Benjamin Contant's solution
- DV's solution
- John's solution
- Fabricio Carrara's solution
- Omar Cagua's solution
- Deepak's solution
- Lani Huang's solution
- Anthony Vumbaca's solution
- John Connor's solution
- Shala Qweghen's solution
- Earth35's solution
- Kelvin Stone's solution
- Ricardo Ferreira's solution
- Cyprium (Stefan)'s solution
- Michael Sotkin)'s solution
- Shawn Stovall's solution
- Joshua Hipple's solution
- Oscar Y.'s solution
- Ace Cassidy's solution
- Adam Graham's solution
- Luchillo's solution
- Rahul's solution
- Clint's
- j-campbell's solution
- Clint's
- Jiazhi Guo's solution
- Zuqi Chen's solution
- Manu Phatak's solution
- Cody Buffaloe's solution
- Leonard Soai-Van solution
- J-kaizen's solution
- Max Platt's solution
- Roy Chen's solution
- Emil Dimitrov's solution
- Piotr Ejsmont's solution
- Chris Chambers' solution
- Timur Kharisov's solution
- Loris Aranda's solution
- Austin Tinsley's solution
- Jack Deegan's solution
- Jakub Peikert's solution
- HenrytheDJ's solution
- Derek Kwong's solution
- Sergey Badulin's solution
- Dom Goj's solution
- grzegorzzajac1989's solution
- Jason Keeney's solution
- Hassan's solution
- Bishal's solution
- Simon's solution
- Kaaviya's solution
- Jerry Gao's solution
- Saroar's solution
- Mike Coon's solution
- Tom Westerhout's solution bubblee sort | Bubble
*sort*by - Pedro Ribeiro's solution
- Sophia Wu's solution
- Smiles's solution
- Joe Himes's solution
- Samuel Langenfeld's solution
- Braydon's solution
- Ryan Barnett's solution
- Kaique "Rique" Borges' solution
- jeff1st's solution
- nmac's solution
- Niño Mollaneda's solution
- Roan Fourie's solution
- Robert Szabo's solution
- Alan Cruse's solution

You learned about the Enumerable module that gets mixed in to the Array and Hash classes (among others) and provides you with lots of handy iterator methods. To prove that there's no magic to it, you're going to rebuild those methods.

- Create a script file to house your methods and run it in IRB to test them later.
Add your new methods onto the existing Enumerable module. Ruby makes this easy for you because any class or module can be added to without trouble ... just do something like:

`module Enumerable def my_each # your code here end end`

Create

`#my_each`

, a method that is identical to`#each`

but (obviously) does not use`#each`

. You'll need to remember the`yield`

statement. Make sure it returns the same thing as`#each`

as well.Create

`#my_each_with_index`

in the same way.Create

`#my_select`

in the same way, though you may use`#my_each`

in your definition (but not`#each`

).Create

`#my_all?`

(continue as above)Create

`#my_any?`

Create

`#my_none?`

Create

`#my_count`

Create

`#my_map`

Create

`#my_inject`

Test your

`#my_inject`

by creating a method called`#multiply_els`

which multiplies all the elements of the array together by using`#my_inject`

, e.g.`multiply_els([2,4,5]) #=> 40`

Modify your

`#my_map`

method to take a proc instead.Modify your

`#my_map`

method to take either a proc or a block. It won't be necessary to apply both a proc and a block in the same`#my_map`

call since you could get the same effect by chaining together one`#my_map`

call with the block and one with the proc. This approach is also clearer, since the user doesn't have to remember whether the proc or block will be run first. So if both a proc and a block are given, only execute the proc.

**Quick Tips:**

- Remember
`yield`

and the`#call`

method.

*Submit a link to the github repo with your files in it here with a pull request. Please include your partner's github handle somewhere in the description if they would like attribution.*

- Add your solution below this line!
- Nicolas Amaya's solution
- John Phelps's Solution
- Ayushka's Solution
- Austin Norman's solution
- Jib's Solution
- Chad Kreutzer's Solution
- Stefan P's Solution
- Raiko's Solution
- Jamie's solution
- Chris Oldakowski's solution
- Marina Sergeyeva's solution
- Afshin M. afshinator's solution
- Donald's solution
- Alan Russell's solution
- Mazin Power's solution
- Sahil Agarwal's solution
- TomTom's solution
- Tommy Noe's solution
- Michael Alexander's solution
- James MacIvor's solution
- Vincent's solution
- Aleksandar's solution
- Lara Finnegan's solution
- John Quarles' solution
- Jack Nguyen's solution
- Vidul's solution
- Hunter Ducharme's solution
- Artur Janik's solution
- Tyler Travers' solution
- Kate McFaul's solution
- Dominik Stodolny's solution
- Chris Dziewa's solution
- Sami Bashraheel's solution
- hiendinhngoc's solution
- Josh Naughton's solution
- Jason Matthews' solution
- JrodManU's solution
- poctek's solution
- Greg Park's solution
- Sasi Kala's solution
- Kevin Mulhern's solution
- Jeremy Mauzy's solution
- LongPotato's solution
- Dorian Iacobescu's solution
- Sam Padrul's solution
- Eleanor Weigert's solution
- omokoro's solution
- Brann James' solution
- Eduardo Frias' solution
- Andrej Dragojevic's solution
- Antonio Augusto's solution
- Ryan Jordan's solution
- ll14m4n's solution
- AtActionParks's solution
- Matias Pan's solution
- Richard Stewart's solution
- Mark Viola's solution
- Dan Hoying's solution
- Joe Balsamo's solution
- Cody Gipson's solution
- Glenn Crosby's solution
- M. Edgar Joel's solution
- Miguel Oliveira's solution
- Xavier Reid's solution
- Gb69010p's solution
- Alex Chen's solution
- Tarek Ahmed's solution
- John Tobillo's solution
- Berin Larson's solution
- Jason Symons' solution
- PiotrAleksander's solution
- AnthonyL's solution
- Angus Dobson's solution
- Ashley Lewis's solution
- Panashe Fundira's solution
- pwdd's solution
- Paweł Cichoń solution
- Noah Prescott's solution
- Florian Mainguy's solution
- Aviv levinsky's solution
- Alex Tsiras' solution
- Maciej Panasiewicz's solution
- Adrian Manteza's solution
- Robin van de Griend's solution
- Giorgos Mitsis's solution
- Theoderik Trajanson's solution
- Sander Schepens's solution
- srashidi's solution
- Eric's solution
- Dave Meister's solution
- Andrew Park's solution
- Austin Mason's solution
- James Brooks's solution
- Ricardo Villegas' solution
- cdouglass's solution
- Skye Free's solution
- Dominik Chomicki's solution
- Corey Kazaks' solution
- Miguel Herrera's solution
- Matt Leininger's solution
- Peuchen's solution
- Andrew Johnson's solution
- Bartlomiej Lazarski's solution
- Maia Petee's solution
- Francisco Carlos's solution
- Luke Walker's solution
- Noobling's solution
- TheBetterNewt's solution
- Max Gallant's solution
- Jean Merlet's solution
- parhaml's solution
- Zac Conner's solution
- Benjamin Contant's solution
- DV's solution
- Vivek Kumar's solution
- Johnny Rasnic's solution
- John's solution
- Fabricio Carrara's solution
- Omar Cagua's solution
- Deepak's solution
- Lani Huang's solution
- Anthony Vumbaca's solution
- Shala Qweghen's solution
- John Connor's solution
- Earth35's solution
- Kelvin Stone's solution
- Ricardo Ferreira's solution
- Michael Sotkin's solution
- Joshua Hipple's solution
- Oscar Y.'s solution
- Ace Cassidy's solution
- Shawn Stovall's solution
- Luchillo's solution
- Adam Graham's solution
- Rahul's solution
- Jiazhi Guo's solution
- j-campbell's solution
- Clint's solution
- Manu Phatak's solution
- Cody Buffaloe's solution
- J-kaizen's solution
- Leonard Soai-Van's solution
- Max Platt's solution
- Roy Chen's solution
- Emil Dimitrov's solution
- Piotr Ejsmont's solution
- Chris Chambers' solution
- Timur Kharisov's solution
- Loris Aranda's solution
- Austin Tinsley's solution
- Jack Deegan's solution
- Jakub Peikert's solution
- HenrytheDJ's solution
- Derek Kwong's solution
- Sergey Badulin's solution
- Dom Goj's solution
- grzegorzzajac1989's solution
- Jason Keeney's solution
- Hassan's solution
- Bishal's solution
- Simon's solution
- Kaaviya's solution
- Jerry Gao's solution
- Mike Coon's solution
- Saroar'S Soulution
- Tom Westerhout's solution
- Pedro Ribeiro's solution
- Sophia Wu's solution
- Smiles's solution
- Joe Himes's solution
- Samuel Langenfeld's solution
- Braydon's solution
- Ryan Barnett's solution
- Kaique "Rique" Borges' solution
- jeff1st's solution
- nmac's solution
- Niño Mollaneda's solution
- Roan Fourie's solution
- Robert Szabo's solution

*This section contains helpful links to other content. It isn't required, so consider it supplemental for if you need to dive deeper into something*

From the creators of The Odin Project...

The Viking Code School