Order by pair comparisons: Difference between revisions
Content added Content deleted
(added ruby) |
|||
Line 867: | Line 867: | ||
final ordering: red orange yellow green blue indigo violet |
final ordering: red orange yellow green blue indigo violet |
||
</pre> |
|||
=={{header|Ruby}}== |
|||
===Ruby: Binary search insertion sort=== |
|||
<lang ruby>items = ["violet", "red", "green", "indigo", "blue", "yellow", "orange"] |
|||
count = 0 |
|||
sortedItems = [] |
|||
items.each {|item| |
|||
puts "Inserting '#{item}' into #{sortedItems}" |
|||
spotToInsert = sortedItems.bsearch_index{|x| |
|||
count += 1 |
|||
print "(#{count}) Is #{item} < #{x}? " |
|||
gets.start_with?('y') |
|||
} || sortedItems.length # if item is greater than all elements, bsearch_index returns nil |
|||
sortedItems.insert(spotToInsert, item) |
|||
} |
|||
p sortedItems</lang> |
|||
{{out}} |
|||
<pre> |
|||
Inserting 'violet' into [] |
|||
Inserting 'red' into ["violet"] |
|||
(1) Is red < violet? y |
|||
Inserting 'green' into ["red", "violet"] |
|||
(2) Is green < violet? y |
|||
(3) Is green < red? n |
|||
Inserting 'indigo' into ["red", "green", "violet"] |
|||
(4) Is indigo < green? n |
|||
(5) Is indigo < violet? y |
|||
Inserting 'blue' into ["red", "green", "indigo", "violet"] |
|||
(6) Is blue < indigo? y |
|||
(7) Is blue < green? n |
|||
Inserting 'yellow' into ["red", "green", "blue", "indigo", "violet"] |
|||
(8) Is yellow < blue? y |
|||
(9) Is yellow < green? y |
|||
(10) Is yellow < red? n |
|||
Inserting 'orange' into ["red", "yellow", "green", "blue", "indigo", "violet"] |
|||
(11) Is orange < blue? y |
|||
(12) Is orange < yellow? y |
|||
(13) Is orange < red? n |
|||
["red", "orange", "yellow", "green", "blue", "indigo", "violet" |
|||
</pre> |
|||
===Ruby: Standard sort with custom comparator=== |
|||
<lang ruby>items = ["violet", "red", "green", "indigo", "blue", "yellow", "orange"] |
|||
count = 0 |
|||
p items.sort {|a, b| |
|||
count += 1 |
|||
print "(#{count}) Is #{a} <, =, or > #{b}. Answer -1, 0, or 1: " |
|||
gets.to_i |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
(1) Is violet <, =, or > red. Answer -1, 0, or 1: 1 |
|||
(2) Is violet <, =, or > green. Answer -1, 0, or 1: 1 |
|||
(3) Is red <, =, or > green. Answer -1, 0, or 1: -1 |
|||
(4) Is violet <, =, or > indigo. Answer -1, 0, or 1: 1 |
|||
(5) Is green <, =, or > indigo. Answer -1, 0, or 1: -1 |
|||
(6) Is violet <, =, or > blue. Answer -1, 0, or 1: 1 |
|||
(7) Is indigo <, =, or > blue. Answer -1, 0, or 1: 1 |
|||
(8) Is green <, =, or > blue. Answer -1, 0, or 1: -1 |
|||
(9) Is violet <, =, or > yellow. Answer -1, 0, or 1: 1 |
|||
(10) Is indigo <, =, or > yellow. Answer -1, 0, or 1: 1 |
|||
(11) Is blue <, =, or > yellow. Answer -1, 0, or 1: 1 |
|||
(12) Is green <, =, or > yellow. Answer -1, 0, or 1: 1 |
|||
(13) Is red <, =, or > yellow. Answer -1, 0, or 1: -1 |
|||
(14) Is violet <, =, or > orange. Answer -1, 0, or 1: 1 |
|||
(15) Is indigo <, =, or > orange. Answer -1, 0, or 1: 1 |
|||
(16) Is blue <, =, or > orange. Answer -1, 0, or 1: 1 |
|||
(17) Is green <, =, or > orange. Answer -1, 0, or 1: 1 |
|||
(18) Is yellow <, =, or > orange. Answer -1, 0, or 1: 1 |
|||
(19) Is red <, =, or > orange. Answer -1, 0, or 1: -1 |
|||
["red", "orange", "yellow", "green", "blue", "indigo", "violet"] |
|||
</pre> |
</pre> |
||