Пятница, 03.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Математика » Разные

Пирамидальная сортировка

Алгоритм пирамидальной сортировки (heapsort) — один из самых быстрых алгоритмов сортировки.

Program heapsort; 
 
{$APPTYPE CONSOLE} 
 
type 
 tkey = integer; 
 int = integer; 
 
const N = 10; 
 
var a,b : array [0..N+1] of tkey; 
 
function parent(x : int) : int; 
begin 
 result:=x shr 1; 
end; 
 
function left(x : int) : int; 
begin 
 result := x shl 1; 
 if result > a[0] then result := N+1; 
end; 
 
function right(x:int):int; 
begin 
 result := x shl 1 + 1; 
 if result > a[0] then result := N+1; 
end; 
 
procedure swap(i,j : int); 
var temp : tkey; 
begin 
 temp := a[i]; 
 a[i] := a[j]; 
 a[j] := temp; 
end; 
 
procedure moveup(x : int); 
begin 
 while (a[x] > a[parent(x)]) and (parent(x) > 0) do begin 
 swap(x, parent(x)); 
 x := parent(x); 
 end; 
end; 
 
procedure movedown(x : int); 
var max : integer; 
begin 
 if a[left(x)] > a[right(x)] then max := left(x) 
 else max := right(x); 
 while (a[max] > a[x]) and (max <= a[0]) do begin 
 swap(max, x); 
 x := max; 
 if a[left(x)] > a[right(x)] then max := left(x) 
 else max := right(x); 
 end; 
end; 
 
 
procedure update(x : int; k : tkey); 
begin 
 a[x] := k; 
 moveup(x); 
 movedown(x); 
end; 
 
procedure add(k : tkey); 
begin 
 inc(a[0]); 
 update(a[0], k); 
end; 
 
procedure delete(x : int); 
begin 
 swap(x, a[0]); 
 dec(a[0]); 
 update(x, a[x]); 
end; 
 
procedure hsort; 
var i:int; 
begin 
 a[0] := 1; 
 a[1] := b[1]; 
 for i := 2 to N do 
 add(b[i]); 
 for i := 1 to N do 
 delete(1); 
end; 
 
var i : int; 
 
begin 
 randomize; 
 fillchar(a, sizeof(a), 0); 
 fillchar(b, sizeof(b), 0); 
 
 for i := 1 to N do 
 b[i] := random(10); 
 
 writeln('Non-sorted elements'); 
 for i := 1 to N do 
 write(b[i], ' '); 
 writeln; 
 
 hsort; 
 
 writeln('Sorted elements'); 
 for i := 1 to N do 
 write(a[i], ' '); 
 readln; 
end.

Получить ссылку на материал

Категория: Разные | Добавил: Барон (20.12.2011)
Просмотров: 1429 | Теги: Сортировка | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Графики [3]
Разные [6]
Банкинг [1]
Королевство Delphi © 2010-2024
Яндекс цитирования