Sorting algorithms/Strand sort: Difference between revisions

(Updated second D entry)
Line 1,284:
a = self.dup
result = []
whileuntil a.length > 0empty?
sublist = [a.shift]
a.each_with_index .each_with_object([]) { |(val, idx), remove|
inject([])next doif |remove, (val, idx)|<= sublist.last
sublist if<< val > sublist[-1]
sublistremove << validx
}.reverse_each {|idx| removea.unshiftdelete_at(idx)}
end
result.each_index do remove|idx|
endbreak .if sublist.empty?
result.insert(idx, sublist.shift) if sublist[0] < result[idx]
each {|idx| a.delete_at(idx)}
 
idx = 0
while idx < result.length and not sublist.empty?
if sublist[0] < result[idx]
result.insert(idx, sublist.shift)
end
idx += 1
end
result += sublist if not sublist.empty?
end
result
end
 
def strandsort!
self.replace(strandsort)
end
end
Anonymous user