Язык программирования Turbo Pascal Нужна помощь, тема сложная для меня, метод пирамидальной сортировки, есть программа со всем необходимым, но не хватает процедуры сортировки. Условие такое: Дан одномерный массив, первую его половину элементов отсортировать по возрастанию, а вторую по убыванию. По возрастанию есть небольшой кусок кода(просто как пример), но его нужно как-то адаптировать к программе(к моему условию) и плюс ещё добавить сортировку второй части по убыванию.
Код | Uses Crt; Const N = 50; Type T_Mas = Array [1..N] of Integer; Var Mas : T_Mas; Kol : Integer; Procedure Count (Var Kol:Integer); {Процедура определения размерности массива} Var IOR : Word; Begin Write('Введите размерность массива: '); Repeat {$I-} ReadLn(Kol); {$I+} IOR := IOResult; If odd(IOR) or (Kol>N) Then WriteLn('Ошибка. Повторите ввод.') Until (Kol<=N) and (IOR=0) End; Procedure Filling (Kol:Integer; Var A: T_Mas); {Процедура заполнения массива} Var I : Integer; Begin Randomize; For I := 1 To Kol Do A[I] := Random(N) End; Procedure Print (Kol:Integer; A: T_Mas); {Процедура вывода массива} Var I : Integer; Begin For I:=1 to Kol do Write (A[I], ' ') End; {.......................пирамидальная сортировка........................} procedure heapsort; var L, R: integer; x: integer; procedure sift (L, R: integer); var i, j: integer; x: integer; begin i:=L; j:=2*L; x:=a[L]; if (j<R) and (a[j] < a[j+1]) then j:=j+1; while (j <= R) and (x < a[j]) do begin a[i]:=a[j]; i:=j; j:=2*j; if (j < R) and (a[j] < a[j+1]) then j:=j+1; end; a[i]:=x end; begin L:=(n Div 2)+1; R:=n; while L > 1 do begin L:=L-1; sift(L, R) end; while R > 1 do begin x:= a[1]; a[1]:= a[R]; a[R]:=x; R:=R-1; sift(L, R) end; end; {.........................................................................................} Begin ClrScr; Count(Kol); Filling(Kol, Mas); WriteLn('Исходный массив'); Print (Kol, Mas); {................процедура пирамидальной сортировки..........} WriteLn; WriteLn('Отсортированный массив'); Print (Kol, Mas); Repeat until KeyPressed End.
|
|