Скрипт быстрой сортировки работает, а пирамидальная сортировка — нет.
Я использовал функцию быстрой сортировки для сортировки своих списков строк, но в качестве упражнения я хотел также попробовать написать функцию пирамидальной сортировки. К сожалению, это не работает, и я не могу понять, почему. Вспомогательные функции, которые я использую, работают (потому что я использую их и в сценарии быстрой сортировки и пробую как в списке, так и быструю сортировку, которая работает, а другая нет)
{------------------------------------------------------------------------------}
Procedure Heapify(AList : TStringList; N, Root : Integer);
Var
Max, L, R : Integer;
Begin
Max := Root;
L := (2 * Root) + 1;
R := (2 * Root) + 2;
If (L < N) And (ListSort(AList, Max, L) < 0 {function to compare strings, read as List[L]>List[Max]}) Then Max := L;
If (R < N) And (ListSort(AList, Max, R) < 0) Then Max := R;
If Max <> Root Then
Begin
ExchangeItems(AList, Root, Max); {Function to swap strings}
Heapify(AList, N, Max);
End;
End;
{------------------------------------------------------------------------------}
Procedure HeapSortStringList(AList : TStringList);
Var
I : Integer;
Begin
For I := (AList.Count / 2) - 1 DownTo 0 Do Heapify(AList, AList.Count, I);
For I := AList.Count - 1 DownTo 1 Do
Begin
ExchangeItems(AList, I, 0);
Heapify(AList, I, 0);
End;
End;
{------------------------------------------------------------------------------}
1 ответ
Как вы скомпилировали этот код?
Обратите внимание, что компилятор выдает нам сообщение:
[Ошибка dcc32] Unit2.pas(175): E2010 Несовместимые типы: «Целое» и «Расширенное»
(AList.Count / 2)
должно быть
(AList.Count div 2)
для целых чисел
После этой коррекции код становится рабочим.