Sorting algorithms/Heapsort: Difference between revisions
Content added Content deleted
(→{{header|ActionScript}}: Added Action!) |
No edit summary |
||
Line 6,103: | Line 6,103: | ||
Wend |
Wend |
||
End Sub</syntaxhighlight> |
End Sub</syntaxhighlight> |
||
=={{header|Vlang}}== |
|||
<syntaxhighlight lang="vlang"> |
|||
fn main() { |
|||
mut alt_arr := [4, 65, 2, -31, 0, 99, 2, 83, 782, 1] |
|||
println('Before : $alt_arr') |
|||
heap_sort(mut alt_arr) // Heap Sort |
|||
println('After : $alt_arr') |
|||
} |
|||
[direct_array_access] |
|||
fn heap_sort(mut array []int) { |
|||
n := array.len |
|||
for i := n/2; i > -1; i-- { |
|||
heapify(mut array, n, i) // Max heapify |
|||
} |
|||
for i := n - 1; i > 0; i-- { |
|||
array[i], array[0] = array[0], array[i] |
|||
heapify(mut array, i, 0) |
|||
} |
|||
} |
|||
[direct_array_access] |
|||
fn heapify(mut array []int, n int, i int) { |
|||
mut largest := i |
|||
left := 2 * i + 1 |
|||
right := 2 * i + 2 |
|||
if left < n && array[i] < array[left] { |
|||
largest = left |
|||
} |
|||
if right < n && array[largest] < array[right] { |
|||
largest = right |
|||
} |
|||
if largest != i { |
|||
array[i], array[largest] = array[largest], array[i] |
|||
heapify(mut array, n, largest) |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Before : [4, 65, 2, -31, 0, 99, 2, 83, 782, 1] |
|||
After : [-31, 0, 1, 2, 2, 4, 65, 83, 99, 782] |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |