Sorting algorithms/Heapsort: Difference between revisions

+Stata
(+Stata)
Line 4,221:
end;
</lang>
 
=={{header|Stata}}==
 
Variant with siftup and siftdown, using Mata.
 
<lang mata>function siftup(a, i) {
k = i
while (k > 1) {
p = floor(k/2)
if (a[k] > a[p]) {
s = a[p]
a[p] = a[k]
a[k] = s
k = p
}
else break
}
}
 
function siftdown(a, i) {
k = 1
while (1) {
l = k+k
if (l > i) break
if (l+1 <= i) {
if (a[l+1] > a[l]) l++
}
if (a[k] < a[l]) {
s = a[k]
a[k] = a[l]
a[l] = s
k = l
}
else break
}
}
 
function heapsort(a) {
n = length(a)
for (i = 2; i <= n; i++) {
siftup(a, i)
}
for (i = n; i >= 2; i--) {
s = a[i]
a[i] = a[1]
a[1] = s
siftdown(a, i-1)
}
}</lang>
 
=={{header|Swift}}==
1,336

edits