Order by pair comparisons: Difference between revisions

added ruby
(added ruby)
Line 867:
 
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>
 
Anonymous user