Здравствуйте, swame, Вы писали:
K>>tdoublearray.QSort2GPT — 1201 ms (это алгоритм от gpt который тут выкладывали, только с инициализацией вспомогательного массива arr в котором выполняется эта сортировка)
S>А сколько QSort2GPT без ненужного дополнительного массива?
Это tdoublearray.QSort5GPTNoExtraArr, 1233 мс.
Там с одной стороны экономится время на копирование, но с другой стороны идёт обращение к свойству fitems класса tdoublearray, а это указатель на указатель на массивоуказатель.
K>>tdoublearray.QSort5GPTNoExtraArr — 1233 ms (то же самое, только не используется вспомогательный массив, сразу запускается эта стандартная сортировка с Хоаром, обрабатывающая fitems класса tdoublearray)
K>>tdoublearray1.superqsort — 8471 ms (tdoublearray1 это то что вы выложили, обертка над tlist<double>, мой алгоритм в оп)
K>>tdoublearray1.QuickSortStandHoar — 2918 ms (стандартная сортировка с Хоаром, вызов QuickSort(0,count-1); )
S>непонятно что это, тот что я выкладывал или
Вот она:
| Скрытый текст |
| procedure tdoublearray1.QuickSortStandHoar;
begin
QuickSort(0,count-1);
end;
procedure tdoublearray1.QuickSort(low, high: Integer);
var
i, j: Integer;
pivot, temp: double;
begin
i := low;
j := high;
pivot := Items[(low + high) div 2];
repeat
while Items[i] < pivot do
Inc(i);
while Items[j] > pivot do
Dec(j);
if i <= j then
begin
temp := Items[i];
Items[i] := Items[j];
Items[j] := temp;
Inc(i);
Dec(j);
end;
until i > j;
if low < j then
QuickSort(low, j);
if i < high then
QuickSort(i, high);
end;
|
| |
Видимо это медленнее потому, что идёт обращение к items, а в моём варианте сначала создаётся массив и к нему обращаться можно быстрее (указатель на массив а не указатель на указатель на массив).
S>Сколько QSort2GPT на tdoublearray1? Алгоритм который я выкладывал?
Вроде QuickSortStandHoar или QuickSort(0,count-1) это она и есть.
S>Сколько стандартный sort на tdoublearray1? Вызов Sort
В смысле библиотечная функция? Я её не сравнивал, там же надо отдельно функцию-компаратор определить, мне это было лень.
S>И кстати тест на 32 или 64 разрядах? Я делал на 32
У меня 64.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.