Пример на Паскале:
Код | program sort;
const MAX = 5;
var iArray1, iArray2 : array[1..MAX] of integer; n, i : integer;
procedure Heap(num : integer); var k, tmp : integer; begin k := num*2; if k <= n then begin if (k + 1 <= n) and (iArray1[k] > iArray1[k + 1]) then inc(k); if iArray1[num] > iArray1[k] then begin tmp := iArray1[num]; iArray1[num] := iArray1[k]; iArray1[k] := tmp; Heap(k); end; end; end;
begin for i := 1 to MAX do begin writeln('Enter element :'); readln(iArray1[i]); end; n := MAX; for i := n div 2 downto 1 do Heap(i); for i := 1 to n do begin iArray2[i] := iArray1[1]; iArray1[1] := iArray1[n]; dec(n); Heap(1); end; Writeln('After sort: '); for i := 1 to MAX do writeln(iArray2[i]); readln; end.
|
Пример на VB:
Код | Option Base 1 Public N, I As Long Const Max = 5 Dim A1(1 To Max), A2(1 To Max) As Long
Sub Heap(ByVal Num As Long) Dim K, Tmp As Long K = Num * 2 If K <= N Then If (K + 1 <= N) And (A1(K) > A1(K + 1)) Then K = K + 1 If A1(Num) > A1(K) Then Tmp = A1(Num) A1(Num) = A1(K) A1(K) = Tmp Heap (K) End If End If End Sub
'Пример использования - по нажатию кнопки Private Sub Command1_Click() For I = 1 To Max A1(I) = CLng(InputBox("Введите элемент:")) Next I N = Max For I = N / 2 To 1 Step -1 Heap (I) Next I For I = 1 To N A2(I) = A1(1) A1(1) = A1(N) N = N - 1 Heap (1) Next I 'Массив отсортирован. Можно вывести данные, например, в ListBox For I = 1 To Max List1.AddItem CStr(A2(I)) Next I End Sub
|
Авторы: http://vingrad.ru/@Rrader - пример на VB. http://vingrad.ru/@THandle - пример на Паскале.
|