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: | Line 1,026: | ||
} |
} |
||
}</lang> |
}</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}}== |
=={{header|Erlang}}== |