Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2007, 22:59   #1
Criss
 
Регистрация: 27.02.2007
Сообщений: 3
По умолчанию heap_sort HELP

Помогите, пожалуйста, разобраться с heap_sort...
Criss вне форума Ответить с цитированием
Старый 27.02.2007, 23:01   #2
Criss
 
Регистрация: 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.
Criss вне форума Ответить с цитированием
Старый 27.02.2007, 23:03   #3
Criss
 
Регистрация: 27.02.2007
Сообщений: 3
По умолчанию Проблема

Помогите мне его изменить, чтобы он сортировал по среднему элементу, т. е.
вверху пирамиды стоял средний элемент(по величине), слева были все меньшие среднего, справа большие, и такое условие для каждой из вершин!
Criss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц