Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [FAQ][Pascal|VB]Сортировка массива методом двоичной кучи


Автор: THandle 20.3.2008, 17:26
Пример на Паскале:

Код

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 - пример на Паскале.

Автор: Rrader 20.3.2008, 17:38
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)