Hi, thanks for taking the time to read my article. Visit aaronvb.com for more reads, and contact me below if you have questions.

AARON VAN BOKHOVEN

You can find me on GitHub, Twitter, Instagram, Flickr, or email at bokhoven@gmail.com

Selection Sort in Ruby

Written Aaron Van Bokhoven on Nov 1, 2014

In my version of Selection Sort in Ruby, I start with the first object in the array and compare it to the next one and so on until I find lowest value, swapping it with the first objects position. I then repeat that on the second object, and the next, until the whole list is sorted.

Here’s an animated sequence of Selection Sort that I found on the Selection Sort Wikipedia.

As always, start with the tests.

require 'test/unit'
require "./selection_sort.rb"

class SortingTests < Test::Unit::TestCase
  def test_selection_sort
    @unsorted = (0..1000).to_a.shuffle
    @sorted = @unsorted.sort
    selection_sort = SelectionSort.new
    result = selection_sort.sort(@unsorted)
    assert_equal @sorted, result
  end
end

And next, the Selection Sort function.

class SelectionSort
  def sort(to_sort)
    arr_to_sort = to_sort
    length_of_sort = arr_to_sort.length
    position_in_array = 0
    while position_in_array < length_of_sort
      @min_val = arr_to_sort[position_in_array]
      (length_of_sort - position_in_array).times.each do |i|
        if arr_to_sort[position_in_array + i] < @min_val
          @min_val = arr_to_sort[position_in_array + i]
          @min_val_index = position_in_array + i
        end
      end
      if @min_val < arr_to_sort[position_in_array]
        @swap_value = arr_to_sort[position_in_array]
        arr_to_sort.delete_at(@min_val_index)
        arr_to_sort.insert(position_in_array, @min_val)
        arr_to_sort.delete_at(position_in_array+1)
        arr_to_sort.insert(@min_val_index, @swap_value)
      end
      position_in_array += 1
    end
    return arr_to_sort
  end
end