OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 12 Май, 2023 08:09 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
если вдруг вам в BBCB понадобилось отсортировать массив, и вы сходу не можете/не хотите вспоминать какой-нибудь алгоритм, то вам помогут исходники модуля Kernel. в процедуре `CheckCandidates()` есть реализация Shell Sort, размером в девять строчек, готовая к копипасте. удобство в том, что эта реализация уж точно-точно работает, иначе вся среда бы глючила и рушилась. одна gotcha: может сортировать не более чем `MAX(INTEGER) DIV 3 - 2` элементов.

поскольку оно совсем маленькое, то я даже приведу здесь код:
Код:
VAR h, i, j: INTEGER; p: MY_TYPE_TO_SORT;

(* Shell sort; N is the number of entries to sort; ARR is the array to sort *)
h := 1; REPEAT h := h * 3 + 1 UNTIL h > N;
REPEAT h := h DIV 3; i := h;
   WHILE i < N DO p := ARR[i]; j := i;
      WHILE (j >= h) & (ARR[j - h] > p) DO
         ARR[j] := ARR[j - h]; j := j - h
      END;
      ARR[j] := p; INC(i)
   END
UNTIL h = 1;


но вам этот код не нужен: достаточно просто запомнить, что внутри Kernel есть вполне годный алгоритм сортировки, который можно при нужде скопипастить.


p.s.: если что, то в таком виде эта штука по скорости примерно как Heap Sort, и рвёт хипсорт в клочки на частично или полностью сортированых массивах (потому что шеллсорт адаптивный).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB