|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
14.12.2013, 12:08 | #1 (permalink) |
Member
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
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 A: T_mas); 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. |
14.12.2013, 12:08 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Схожие топики помогут вам быстрее решить этот вопрос Сортировка Turbo Pascal Turbo Pascal Turbo Pascal |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|