Skip to content

Instantly share code, notes, and snippets.

@freireag
Created October 1, 2008 01:58
Show Gist options
  • Save freireag/14003 to your computer and use it in GitHub Desktop.
Save freireag/14003 to your computer and use it in GitHub Desktop.
require 'benchmark'
def quicksort(entry, method)
return entry if entry.size <= 1
pivot = identify_pivot(entry, method)
left, right = entry.partition {|e| e < pivot}
quicksort(left, method) + [pivot] + quicksort(right, method)
end
def identify_pivot(entry, method)
return entry.pop if method == 'first'
return entry.delete_at(entry.index(medium(entry[0..2]))) if method == 'three'
return entry.delete_at(entry.index(medium(entry[0..4]))) if method == 'five'
end
def medium(entry)
return entry.sort[(entry.size/2).floor]
end
entry = (1..1000000).map {rand}
Benchmark.bmbm do |r|
r.report("first") {quicksort(entry.dup, 'first')}
r.report("three") {quicksort(entry.dup, 'three')}
r.report("five") {quicksort(entry.dup, 'five')}
r.report("sort") {entry.dup.sort}
r.report("sort!") {entry.dup.sort!}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment