Sorting algorithms/Quicksort: Difference between revisions

Content added Content deleted
(Add Seed7 example)
Line 220: Line 220:
a = [4, 65, 2, -31, 0, 99, 83, 782, 1]
a = [4, 65, 2, -31, 0, 99, 83, 782, 1]
a = quickSort(a)
a = quickSort(a)

==[[Seed7]]==
[[Category:Seed7]]
<pre>
const proc: quickSort (inout array elemType: arr, in integer: left, in integer: right) is func
local
var elemType: compare_elem is elemType.value;
var integer: less_idx is 0;
var integer: greater_idx is 0;
var elemType: help is elemType.value;
begin
if right > left then
compare_elem := arr[right];
less_idx := pred(left);
greater_idx := right;
repeat
repeat
incr(less_idx);
until arr[less_idx] >= compare_elem;
repeat
decr(greater_idx);
until arr[greater_idx] <= compare_elem or greater_idx = left;
if less_idx < greater_idx then
help := arr[less_idx];
arr[less_idx] := arr[greater_idx];
arr[greater_idx] := help;
end if;
until less_idx >= greater_idx;
arr[right] := arr[less_idx];
arr[less_idx] := compare_elem;
quickSort(arr, left, pred(less_idx));
quickSort(arr, succ(less_idx), right);
end if;
end func;

const proc: quickSort (inout array elemType: arr) is func
begin
quickSort(arr, 1, length(arr));
end func;
</pre>
Original source: [http://seed7.sourceforge.net/algorith/sorting.htm#quickSort]