Реализации алгоритмов/Сортировка/Пирамидальная: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 490:
end;
</source></big>
==Pascal(4 вариант)==
Program Heapsort;
uses crt;
const n=10;
type IndexType=1..n;
type ElemType=integer;
type Elemarray=array [IndexType] of ElemType;
const Unsorted:ElemArray=(1,2,3,4,5,6,7,8,9,10);
 
Procedure Swap(var ElemFirst,ElemSecond:ElemType);
var Replacement:Elemtype;
begin
Replacement:=ElemFirst;
ElemFirst:=Elemsecond;
Elemsecond:=Replacement
end;
 
Procedure SiftingDown(var Unsorted:ElemArray;Start,Ending:IndexType);
var Root,Child:IndexType;
begin
Root:=Start;
Child:=2*Root;
While (2*Root<=Ending) and (Unsorted[Root]<=Unsorted[Child]) do
begin
if (Child<Ending) and (Unsorted[Child]<Unsorted[Child+1]) then inc(Child);
swap(Unsorted[Root],Unsorted[Child]);
if Child <= n div 2 then
begin
Root:=Child;
Child:=2*Root
end
end
end;
 
Procedure HeapBilding(var Unsorted:ElemArray);
var Start:Indextype;
begin
Start:=n div 2;
while Start>1 do
begin
SiftingDown(Unsorted,Start,n);
dec(Start)
end;
if Start=1 then SiftingDown(Unsorted,Start,n)
end;
 
Function HeapSort(Unsorted:ElemArray):ElemArray;
var Ending:IndexType;
ResultArray:ElemArray;
begin
ResultArray:=Unsorted;
HeapBilding(ResultArray);
Ending:=n;
while Ending>1 do
begin
swap(ResultArray[1],ResultArray[Ending]);
dec(Ending);
SiftingDown(ResultArray,1,Ending)
end;
HeapSort:=ResultArray
end;
 
Procedure WriteResult(Sorted:Elemarray);
var i:IndexType;
begin
for i:=1 to n do
write(Sorted[i],' ');
writeln<nowiki>Вставьте сюда текст, который не нужно форматировать</nowiki>
end;
 
{Начало Программы}
begin
Writeln('Intinal Array');
WriteResult(Unsorted);
 
Writeln('Result:');
Writeln('HeapSort:');
WriteResult(HeapSort(Unsorted))
end.
 
== [[w:Python|Python]] ==
<big><source lang="python">