Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,32 @@
|
|||
import <Utilities/Sequence.sl>;
|
||||
|
||||
TUPLE<T> ::= (A: T, B: T);
|
||||
|
||||
heapSort(x(1)) :=
|
||||
let
|
||||
heapified := heapify(x, (size(x) - 2) / 2 + 1);
|
||||
in
|
||||
sortLoop(heapified, size(heapified));
|
||||
|
||||
heapify(x(1), i) :=
|
||||
x when i <= 0 else
|
||||
heapify(siftDown(x, i, size(x)), i - 1);
|
||||
|
||||
sortLoop(x(1), i) :=
|
||||
x when i <= 2 else
|
||||
sortLoop( siftDown(swap(x, 1, i), 1, i - 1), i - 1);
|
||||
|
||||
siftDown(x(1), start, end) :=
|
||||
let
|
||||
child := start * 2;
|
||||
child1 := child + 1 when child + 1 <= end and x[child] < x[child + 1] else child;
|
||||
in
|
||||
x when child >= end else
|
||||
x when x[start] >= x[child1] else
|
||||
siftDown(swap(x, child1, start), child1, end);
|
||||
|
||||
swap(list(1), i, j) :=
|
||||
let
|
||||
vals := (A: list[i], B: list[j]);
|
||||
in
|
||||
setElementAt(setElementAt(list, i, vals.B), j, vals.A);
|
||||
Loading…
Add table
Add a link
Reference in a new issue