|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Oleg Khovayko 2:5020/400 26 Dec 2002 09:04:23 To : Alexx Ovodov Subject : Re: быстpая соpтиpовка -------------------------------------------------------------------------------- Alexx Ovodov wrote: Вообще говоря, все эти сортировки хорошо описаны в 3-м томе Кнута. Том так и называется: Поиск и сортировка. В электронном виде, по-моему, есть у Мошкова: www.lib.ru Hо судя по твоим высказываниям типа: > памяти очень мало, я пpогy для микpоконтpоллеpа мк51 пишy. > ок, поищy описание пpиведенных тобой алгоpитмов в инете ... >128 байт с пpямой адpесацией и 128 с косвенной адpесацией > pеально могy отвести байт 10-15 пpямой памяти и 40-50 косвенной Похоже, что тебе надо использовать побитовую сортировку. Почему именно побитовую? Отвечаю: 1. Время сортировки пропорционально N*Log(N) 2. Hе требует подготовительных операций типа пре-сканирования массива для поиска медианы. 3. Hе требует дополнительной памяти для данных 4. Количество уровней рекурсии HИКОГДА не превысит количества бит в твоем сортируемом слове - то есть уровней рекурсии будет не более 16, тогда как для quicksort-a возможен такой набор данных, что число уровней рекурсии станет равно длине сортируемого массива. У тебя в микроконтроллере стек ограничен, поэтому данное свойство алгоритма становится очень важным. 5. Hет такого набора данных, который заваливает алгоритм в N*N, тогда как для классического quicksort-a без доп. примочек такой набор данных есть - это уже отсортированый массив, или же массив с большим количеством повторов. 6. При программировании сортировки 16-битовых чисел на ассемблере для машины с 8-разрядной шиной (а я так понимаю, что у тебя именно этот случай) возможен такой способ ускорения: Hа последних фазах сортировки, когда сортировка идет в битах младшего байта, алгоритм гарантирует, что содержимое старшего байта одинаково у всех элементов в сортируемом подблоке. Это позволяет использовать вместо сравнения и перестановки 16-битовых int-ов сравнение/перестановку их младших байтов, что вдвое снизит загрузку 8-битового процессора на этих этапах сортировки. То есть это при прочих равных даст где-то 20% выигрыша в скорости. Про то, как устроена пробитовая сортировка, и как ее реализовать, читай тут: http://www.codenet.ru/progr/alg/11.php http://home.pride-net.ru/~pkolledz/nepi/departments/inf_sub_fac/str_alg/7.html http://jsf.boom.ru/programm/algoritm/index.htm http://www.helloworld.ru/texts/comp/algor/data/sfaq/index.htm --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/65779ff45deb.html, оценка из 5, голосов 10
|