SortArrayInteger([1, 5, 8, 7, 3, 4, 6], 7) ==> [1, 3, 5, 4, 6, 7, 8 ]
И чего же ты подправил?
Модератор: Модераторы
скалогрыз писал(а):Смело правьте!
procedure AnySort(var Arr; Count: Integer; Stride: Integer; CompareFunc: TCompareFunc);
var
bufs: array of byte;
begin
SetLength(bufs, 2 * Stride);
AnyQuickSort(Arr, 0, Count-1, Stride, compareFunc, bufs[0], bufs[Stride]);
end;
это называется разработка кода на глаз... даже не обратил внимания на мелочи, что цикл всего один и проверка идёт до нуля у меня.iskander писал(а):Так похоже и раньше было не до них, пузырьковая сортировка целочисленного массива:
iskander писал(а):SortArrayInteger([1, 5, 8, 7, 3, 4, 6], 7) ==> [1, 3, 5, 4, 6, 7, 8 ]
И чего же ты подправил?
1 5 8 7 3 4 6
1 3 4 5 6 7 8
runewalsh писал(а):Кстати, ещё такая тема: ты в своём быстром исправлении сделал 2 SetLength, когда можно один на двойную длину, эдакий memory region.
скалогрыз писал(а):напугал ведь меня! всё норм работает
iskander писал(а):В текущем состоянии она даже не компилируется.
iskander писал(а):Теперь более-менее, но на пустом массиве с грохотом падает.
zub писал(а):Сквозняк
>>Если бы мне потребовалась от него иная работа, то и написал бы по другому. Например так:
Уже как минимум 2 гото для выхода с сохранением переменной. не многим лучше установки флага о прерывании цикла
Быдлокодте в меру своей испорченности. умываю руки
--LGenerics-----------------
TimSort: 2668 ms
MergeSort: 2043 ms
QuickSort: 1513 ms
IntroSort: 1544 ms
DualPivotQuickSort: 1513 ms
PDQSort: 795 ms
Sort(ordinal): 266 ms
------------------------------
AnySort2: 1794 ms
runewalsh писал(а):Сделал, проверьте: https://wiki.freepascal.org/Array_sort#Advanced_version
runewalsh писал(а):Алсо, для индексов массивов лучше использовать не integer, а SizeInt: на 64-битной платформе массивы могут быть длиннее 2 млрд. элементов, а sizeof(Integer) = 4. RTL для индексов и длин использует как раз SizeInt
sizeint corresponds to the size of the "offset" part of pointers, while ptrint to the size of an entire pointer. On most platforms these are the same because they use a linear address space, but e.g. on 16 bit MSDOS with a memory model that supports far data, sizeint is 16 bit while ptrint is 32 bit (16 bit segment + 16 bit offset).
SizeInt is used to describe sizes of structures in FPC using a signed integer. The actual type of this type depends on the architecture: its size reflects the maximum addressable memory on the current architecture, thus it is 64-bit on 64-bit platforms, 32-bit on 32-bit platforms, and 16 bit on 16 bit platforms.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46