all tasks
This commit is contained in:
parent
b83f433714
commit
68f8f3e56b
14735 changed files with 178959 additions and 0 deletions
|
|
@ -0,0 +1,53 @@
|
|||
bundle Default {
|
||||
class HeapSort {
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
values := [4, 3, 1, 5, 6, 2];
|
||||
HeapSort(values);
|
||||
each(i : values) {
|
||||
values[i]->PrintLine();
|
||||
};
|
||||
}
|
||||
|
||||
function : HeapSort(a : Int[]) ~ Nil {
|
||||
count := a->Size();
|
||||
Heapify(a, count);
|
||||
|
||||
end := count - 1;
|
||||
while(end > 0) {
|
||||
tmp := a[end];
|
||||
a[end] := a[0];
|
||||
a[0] := tmp;
|
||||
SiftDown(a, 0, end - 1);
|
||||
end -= 1;
|
||||
};
|
||||
}
|
||||
|
||||
function : Heapify(a : Int[], count : Int) ~ Nil {
|
||||
start := (count - 2) / 2;
|
||||
while(start >= 0) {
|
||||
SiftDown(a, start, count - 1);
|
||||
start -= 1;
|
||||
};
|
||||
}
|
||||
|
||||
function : SiftDown(a : Int[], start : Int, end : Int) ~ Nil {
|
||||
root := start;
|
||||
while((root * 2 + 1) <= end) {
|
||||
child := root * 2 + 1;
|
||||
if(child + 1 <= end & a[child] < a[child + 1]) {
|
||||
child := child + 1;
|
||||
};
|
||||
|
||||
if(a[root] < a[child]) {
|
||||
tmp := a[root];
|
||||
a[root] := a[child];
|
||||
a[child] := tmp;
|
||||
root := child;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue