Jump to content

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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.