Sorting algorithms/Heapsort: Difference between revisions

add PL/I
(→‎{{header|REXX}}: Output looks incorrect!?!)
(add PL/I)
Line 1,949:
Wend
EndProcedure</lang>
 
=={{header|PL/I}}==
<lang pli>*process source xref attributes or(!);
/*********************************************************************
* Pseudocode found here:
* http://en.wikipedia.org/wiki/Heapsort#Pseudocode
* Sample data from REXX
* 27.07.2013 Walter Pachl
*********************************************************************/
heaps: Proc Options(main);
Dcl a(0:25) Char(50) Var Init(
'---letters of the modern Greek Alphabet---',
'==========================================',
'alpha','beta','gamma','delta','epsilon','zeta','eta','theta',
'iota','kappa','lambda','mu','nu','xi','omicron','pi',
'rho','sigma','tau','upsilon','phi','chi','psi','omega');
Dcl n Bin Fixed(31) Init((hbound(a)+1));
 
Call showa('before sort');
Call heapsort((n));
Call showa(' after sort');
 
heapSort: Proc(count);
Dcl (count,end) Bin Fixed(31);
Call heapify((count));
end=count-1;
do while(end>0);
Call swap(end,0);
end=end-1;
Call siftDown(0,(end));
End;
End;
 
heapify: Proc(count);
Dcl (count,start) Bin Fixed(31);
start=(count-2)/2;
Do while (start>=0);
Call siftDown((start),count-1);
start=start-1;
End;
End;
 
siftDown: Proc(start,end);
Dcl (count,start,root,end,child,sw) Bin Fixed(31);
root=start;
Do while(root*2+1<= end);
child=root*2+1;
sw=root;
if a(sw)<a(child) Then
sw=child;
if child+1<=end & a(sw)<a(child+1) Then
sw=child+1;
if sw^=root Then Do;
Call swap(root,sw);
root=sw;
End;
else
return;
End;
End;
 
swap: Proc(x,y);
Dcl (x,v) Bin Fixed(31);
Dcl temp Char(50) Var;
temp=a(x);
a(x)=a(y);
a(y)=temp;
End;
 
showa: Proc(txt);
Dcl txt Char(*);
Dcl j Bin Fixed(31);
Do j=0 To hbound(a);
Put Edit('element',j,txt,a(j))(skip,a,f(3),x(1),a,x(1),a);
End;
End;
 
End;</lang>
Output:
<pre>
element 0 before sort ---letters of the modern Greek Alphabet---
element 1 before sort ==========================================
element 2 before sort alpha
element 3 before sort beta
element 4 before sort gamma
element 5 before sort delta
element 6 before sort epsilon
element 7 before sort zeta
element 8 before sort eta
element 9 before sort theta
element 10 before sort iota
element 11 before sort kappa
element 12 before sort lambda
element 13 before sort mu
element 14 before sort nu
element 15 before sort xi
element 16 before sort omicron
element 17 before sort pi
element 18 before sort rho
element 19 before sort sigma
element 20 before sort tau
element 21 before sort upsilon
element 22 before sort phi
element 23 before sort chi
element 24 before sort psi
element 25 before sort omega
element 0 after sort ---letters of the modern Greek Alphabet---
element 1 after sort ==========================================
element 2 after sort alpha
element 3 after sort beta
element 4 after sort chi
element 5 after sort delta
element 6 after sort epsilon
element 7 after sort eta
element 8 after sort gamma
element 9 after sort iota
element 10 after sort kappa
element 11 after sort lambda
element 12 after sort mu
element 13 after sort nu
element 14 after sort omega
element 15 after sort omicron
element 16 after sort phi
element 17 after sort pi
element 18 after sort psi
element 19 after sort rho
element 20 after sort sigma
element 21 after sort tau
element 22 after sort theta
element 23 after sort upsilon
element 24 after sort xi
element 25 after sort zeta
</pre>
 
=={{header|Python}}==
2,295

edits