|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.02.2007, 22:59 | #1 |
Регистрация: 27.02.2007
Сообщений: 3
|
heap_sort HELP
Помогите, пожалуйста, разобраться с heap_sort...
|
27.02.2007, 23:01 | #2 |
Регистрация: 27.02.2007
Сообщений: 3
|
Вот используемый алгоритм
program Heap_Sort;
uses SysUtils; const MaxN = 1500000; var a: array[1..MaxN] of LongInt; n, hs, i: LongInt; procedure swap(var x, y: LongInt); var z: LongInt; begin z := x; x := y; y := z; end; procedure pushdown(j: LongInt); var max: LongInt; begin {âûáîð ìàêñèìàëüíîãî èç òðåõ ýëåìåíòà} if (2*j <= hs) and (a[j] < a[2*j]) then max := 2*j else max := j; if (2*j+1 <= hs) and (a[max] < a[2*j+1]) then max := 2*j+1; {åñëè ñâîéñòâî (1) íå âûïîëíÿåòñÿ, ðåêóðñèâíî çàïóñêàåì ïðîöåäóðó ñíîâà} if max <> j then begin swap(a[max], a[j]); pushdown(max) end end; procedure heapsort; begin hs := n; {ñòðîèì êó÷ó} for i := n div 2 downto 1 do pushdown(i); {ïîñòåïåííî âûêèäûâàåì èç êó÷è ìàêñèìàëüíûé ýëåìåíò} for i := n downto 2 do begin swap(a[1], a[i]); {ìàêñèìàëüíûé ýëåìåíò - â êîíåö êó÷è} dec(hs); {óìåíüøàåì êó÷ó, îäíîâðåìåííî âûêèäûâàÿ èç íåå ìàêñèìàëüíûé ýëåìåíò} pushdown(1) {äëÿ êîðíÿ ïîñëå îáìåíà ñâîéñòâî (1) íàðóøåíî} end end; procedure Init; begin assign(input,'input.txt'); reset(input); assign(output,'output.txt'); rewrite(output); n:=7; for i:=1 to n do read(a[i]); end; procedure Save; begin for i:=1 to n-1 do write(a[i],' '); write(a[n]); end; begin Init; heapsort; Save; end. |
27.02.2007, 23:03 | #3 |
Регистрация: 27.02.2007
Сообщений: 3
|
Проблема
Помогите мне его изменить, чтобы он сортировал по среднему элементу, т. е.
вверху пирамиды стоял средний элемент(по величине), слева были все меньшие среднего, справа большие, и такое условие для каждой из вершин! |