Sorting algorithms/Quicksort: Difference between revisions

Content added Content deleted
(Added module to reuse for Compare sorting algorithms' performance)
(Added Eiffel version)
Line 1,026:
}
}</lang>
 
=={{header|Eiffel}}==
<lang eiffel>
class
APPLICATION
 
create
make
 
feature --Implementation
 
quicksort (list: ARRAY [COMPARABLE]): ARRAY [COMPARABLE]
local
less_a: ARRAY [COMPARABLE]
equal_a: ARRAY [COMPARABLE]
more_a: ARRAY [COMPARABLE]
temp: ARRAY [COMPARABLE]
return: ARRAY [COMPARABLE]
pivot: COMPARABLE
i: INTEGER
do
create less_a.make_empty
create more_a.make_empty
create equal_a.make_empty
create return.make_empty
if list.count <= 1 then
Result := list
else
pivot := list [list.lower]
from
i := list.lower
until
i > list.upper
loop
if list [i] < pivot then
less_a.force (list [i], less_a.count)
elseif list [i] = pivot then
equal_a.force (list [i], equal_a.count)
elseif list [i] > pivot then
more_a.force (list [i], more_a.count)
end
i := i + 1
end
temp := quicksort (less_a)
across
temp as t
loop
return.force (t.item, return.count)
end
across
equal_a as eq
loop
return.force (eq.item, return.count)
end
temp := quicksort (more_a)
across
temp as t
loop
return.force (t.item, return.count)
end
Result := return
end
end
 
feature {NONE} -- Initialization
 
make
-- Run application.
local
test: ARRAY [INTEGER]
sorted: ARRAY [COMPARABLE]
do
create test.make_empty
test.force (3, 0)
test.force (2, 1)
test.force (4, 2)
sorted := quicksort (test)
across
sorted as s
loop
print (s.item)
print (" ")
end
print ("%N")
end
 
end
</lang>
 
=={{header|Erlang}}==