Skip to content

Instantly share code, notes, and snippets.

@raphaelcm
Created April 14, 2013 21:53
Show Gist options
  • Select an option

  • Save raphaelcm/5384397 to your computer and use it in GitHub Desktop.

Select an option

Save raphaelcm/5384397 to your computer and use it in GitHub Desktop.

Revisions

  1. raphaelcm created this gist Apr 14, 2013.
    28 changes: 28 additions & 0 deletions mergesort.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    module Mergesort
    def self.sort(array)
    return array if array.length <= 1
    middle = array.length/2
    left = sort(array[0..(middle-1)])
    right = sort(array[middle..-1])

    merge(left, right)
    end

    def self.merge(left, right)
    result = []
    while(left.length > 0 || right.length > 0) do
    if left.length > 0 && right.length > 0
    if left.first <= right.first
    result << left.shift
    else
    result << right.shift
    end
    elsif left.length > 0
    result << left.shift
    elsif right.length > 0
    result << right.shift
    end
    end
    result
    end
    end
    18 changes: 18 additions & 0 deletions quicksort.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    module Quicksort
    module Simple
    def self.sort(array)
    return array if array.length <= 1
    less = []
    greater = []
    pivot = array.shift
    array.each do |elem|
    if elem <= pivot
    less << elem
    else
    greater << elem
    end
    end
    sort(less) + [pivot] + sort(greater)
    end
    end
    end