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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2016, 22:32   #1
Дмитрий Карнава
Новичок
Джуниор
 
Регистрация: 01.12.2016
Сообщений: 1
По умолчанию Перепишите код на язык C#

Помогите переписать код с паскаля на С#. Если есть ошибки, помогите исправить. Алгоритм турнирной сортировки
Вот сам код
{ Турнирная сортировка }
type nptr = ^node; { указатель на узел }
node = record { узел дерева }
key : integer; { данные }
left, right : nptr; { указатели на потомков }
next : nptr; { указатель на "брата" }
end;
{ Создание дерева - функция возвращает указатель на вершину
созданного дерева }
Function Heap_Create(a : Seq) : nptr;
var i : integer;
ph2 : nptr; { адрес начала списка уровня }
p1 : nptr; { адрес нового элемента }
p2 : nptr; { адрес предыдущего элемента }
pp1, pp2 : nptr; { адреса соревнующейся пары }
begin
{ Фаза 1 - построение самого нижнего уровня пирамиды }
ph2:=nil;
for i:=1 to n do begin
New(p1); { выделение памяти для нового эл-та }
p1^.key:=a[i]; { запись данных из массива }
p1^.left:=nil; p1^.right:=nil; { потомков нет }
{ связывание в линейный список по уровню }
if ph2=nil then ph2:=p1 else p2^.next:=p1;
p2:=p1;
end; { for }
p1^.next:=nil;
{ Фаза 2 - построение других уровней }
while ph2^.next<>nil do begin { цикл до вершины пирамиды }
pp1:=ph2; ph2:=nil; { начало нового уровня }
while pp1<>nil do begin { цикл по очередному уровню }
pp2:=pp1^.next;
New(p1);
{ адреса потомков из предыдущего уровня }
p1^.left:=pp1; p1^.right:=pp2;
p1^.next:=nil;
{ связывание в линейный список по уровню }
if ph2=nil then ph2:=p1 else p2^.next:=p1;
p2:=p1;
{ состязание данных за выход на уровень }
if (pp2=nil)or(pp2^.key > pp1^.key) then p1^.key:=pp1^.key
else p1^.key:=pp2^.key;
{ переход к следующей паре }
if pp2<>nil then pp1:=pp2^.next else pp1:=nil;
end; { while pp1<>nil }
end; { while ph2^.next<>nil }
Heap_Create:=ph2;
end;
{ Реорганизация поддерева - функция возвращает
указатель на вершину реорганизованного дерева }
Function Competit(ph : nptr) : nptr;
begin
{ определение наличия потомков, выбор потомка для
реорганизации, реорганизация его }
if (ph^.left<>nil)and(ph^.left^.key=ph ^.key) then
ph^.left:=Competit(ph^.left)
else if (ph^.right<>nil) then
ph^.right:=Competit(ph^.right);
if (ph^.left=nil)and(ph^.right=nil) then begin
{ освобождение пустого узла }
Dispose(ph); ph:=nil;
end;
else
{ состязание данных потомков }
if (ph^.left=nil) or
((ph^.right<>nil)and(ph^.left^.key > ph^.right^.key)) then
ph^.key:=ph^.right^.key
else ph^.key:=ph^.left^.key;
Competit:=ph;
end;
{ Сортировка }
Procedure Heap_Sort(var a : Seq);
var ph : nptr; { адрес вершины дерева }
i : integer;
begin
ph:=Heap_Create(a); { создание дерева }
{ выборка из дерева }
for i:=1 to N do begin
{ перенос данных из вершины в массив }
a[i]:=ph^.key;
{ реорганизация дерева }
ph:=Competit(ph);
end;
end;
Дмитрий Карнава вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перепишите код dkii Общие вопросы C/C++ 3 21.12.2013 21:27
перепишите на язык си Tolian92 Помощь студентам 1 22.01.2012 13:34
перепишите на язык си Tolian92 Помощь студентам 1 21.01.2012 16:34