Skip to content

Instantly share code, notes, and snippets.

@ram-nad
Created March 26, 2020 18:18
Show Gist options
  • Save ram-nad/37b1029ab6d6f76a040a07e901c4f3dd to your computer and use it in GitHub Desktop.
Save ram-nad/37b1029ab6d6f76a040a07e901c4f3dd to your computer and use it in GitHub Desktop.
proc heapify(high: int, in idx: int, arr: [1..high] int){
while(true){
var largest = idx;
var left = 2*idx;
var right = 2*idx + 1;
if(left <= high && arr(largest) < arr(left)){
largest = left;
}
if(right <= high && arr(largest) < arr(right)){
largest = right;
}
if(largest != idx){
arr(largest) <=> arr(idx);
idx = largest;
}else{
break;
}
}
}
proc heapsort(n: int, arr: [1..n] int){
for i in (2..(n/2) by -1){
heapify(n, i, arr);
}
for i in (1..n by -1){
heapify(i, 1, arr(1..i));
arr(1) <=> arr(i);
}
}
var a = [1, 9, 5, -3, 6, -1, 7];
heapsort(7, a);
writeln(a);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment