Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
Windows Movie Maker 2.6
MP3 To Ringtone Gold v3.02
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Программирование -> Delphi / Pascal -> Структуры и базы данных, методы сортировки


Обменная сортировка с разделением

Данный метод является одним из лучших методов внутренней сортировки и весьма эффективен для больших таблиц. Целью каждого шага в данном методе является помещение очередной рассматриваемой записи на конечную позицию внутри таблицы. Если поступать таким способом, то все записи, предшествующие дан-
ной, будут иметь меньший ключ, в то время как все последующие - больший. При использовании такого метода таблица всегда делится на две подтаблицы. Анологичный процесс может быть применен к каждой из этих подтаблиц и повторяться до тех пор, пока все записи не будут установлены на их конечные позиции.
Используются два индекса i и j с начальными значениями границ таблицы. Сравниваются ключи K[i] и K[j], и если перестановка не требуется, то j уменьшается на 1, и процесс повторяется.     В том    случае, когда K[i]>=K[j], записи R[i] и R[j]
меняются местами. Затем этот процесс повторяется с i, увеличенным на 1, и фиксированным j до тех пор, пока не возникает другая перестановка. В этот момент j снова будет уменьшено на 1, а i останется фиксированным, и т.д. Процесс выполняется до тех пор, пока i<j.

Каждый раз таблица разбивается на две подтаблицы, одна из которых обрабатывается, в то время как границы второй запоминаются с тем,     чтобы она была обработана позже. В этих целях может быть использован стек, представляющий собой матрицу из двух столбцов. В первом столбце хранятся нижние границы разделяемых подтаблиц, во втором - верхние границы. Всякий раз одна из полученных в результате разделения подтаблиц подвергается дальнейшему разделению, а границы другой помещаются в свободную строку стека (обычно в стек помещаются границы большей по длине таблицы, поскольку это уменьшает требуемый размер стека). Как только завершается процесс разделения текущей подтаблицы, т.е. ее длина станет меньше трех, для разделения берется подтаблица, границы которой были занесены в стек последними. Строка стека, в которой хранились эти границы, освобождается. Процесс упорядочения завершается, когда стек полностью освобождается.
Разделение следует применять для подтаблиц,     длина которых больше 9, а короткие подтаюлицы упорядочивать методом вставки.
Стек занимает мало места.Например,стек из 20 строк позволяет упорядочить таблицу,содержащую до 10**7 записей.Кроме того, в современных языках программирования    при работе рекурсивных программ занесение и извлечение из стека выполняется автоматически,поэтому рекомендуется использовать именно этот
механизм. Среднее число сравнений для данного алгоритма составляет n*log(n)
где n - число записей в сортируемой таблице, m - размер подтаблицы, сортируемой методом вставки.

Наихудшей ситуацией при использовании рассмотренного алгоритма является случай, когда таблица уже отсортирована. При этом число сравнений порядка n , т.е. алгоритм не лучше сортировки выборкой.

В качестве примера рассмотрим записи со следующими ключами:

42    23    74    11    36     58    94

Ниже приведена последовательность перестановок при перемещении записи с ключем 42    на его конечную позицию. Подчеркнуты ключи,значения которых сравнивались.

42    23    74    11    36     58    94
~~~                                        ~~~
42    23    74    11    36     58    94
~~~                                 ~~~
42    23    74    11    36     58    94
~~~                        ~~~
-----------------------------------
36    23    74    11    42     58    94
      ~~~                   ~~~
36    23    74    11    42     58    94
              ~~~           ~~~
-----------------------------------
36    23    42    11    74     58    94
               ~~~ ~~~
----------------------------------
36    23    11    42    74     58   94
                        ~~

В результате    записи с исходными ключами разбиты на две подтаблицы,а именно,на наборы [36,23,11] и [74,58,94],к которым применяется тот же метод.

В качестве разделяющего можно выбрать X - любой элемент таблицы,например,средний (l=n/2).Сначала таблица рассматривается слева от X до тех пор,пока не обнаружится ключ K[i]>X (K[i]<=X, i:=i+1; если K[i]>X,то i фиксируется). Затем таблица просматривается справа,пока выполняется K[j]>=X (j:= j-1; если K[j]<X, то j фиксируется).Элементы таблицы с ключами K[i] и K[j] меняются местами.Процесс просмотра и обмена продолжается до тех пор, пока оба просмотра не встретятся в некоторой позиции таблицы. При этом необходимо сравнивать индексы i и j с     индексом выбранного элемента X ( индекс l) с тем,чтобы процесс обмена (перестановки) записей с ключами K[i] и K[j] выполнялся правильно. В результате таблица окажется разбитой на левую часть с ключами меньше или равными X, и правую - с ключами больше X.
Для каждой из полученных частей процесс повторяется.

Содержание



 
Популярные книги

Ремонт и обслуживание компьютера дома

Подробнее

Дизайн помещений и интерьеров в 3ds max 7 (+CD)

Подробнее

Проектирование реляционных баз данных. Просто и доступно

Подробнее


 
Новости ИТ
10.01.2009  Skype появился на Android и готовится к покорению iPhone
10.01.2009  Студенты-хакеры улучшат безопасность бостонского метро
09.01.2009  Exeda -- корпоративный цифровой ассистент с Android Linux
09.01.2009  Правительство Вьетнама массово переходит на Open Source
09.01.2009  Windows 7 build 7000
09.01.2009  Silicon Power представила скоростную SDHC
09.01.2009  CES 2009: RealView 360 3D Desktop Scanner - настольный 3D-сканер, один из первых в мире
09.01.2009  W90 - очень быстрый мультимедийный ноутбук ASUS «Ultimate-уровня»
09.01.2009  CES 2009: SanDisk представила семейство G3 - самых быстрых SSD-накопителей на флэш-памяти MLC
09.01.2009  ZOTAC GeForce GTX 285 и GTX 285 AMP! Edition - 3D-ускорители для геймеров на новом GPU NVIDIA
09.01.2009  Net Applications: в декабре доли Firefox и Chrome росли за счет IE
09.01.2009  Imation говорит о «новом классе» SSD и первом в отрасли полном наборе для модернизации на основе SSD
09.01.2009  Маршрутизатор D-Link Xtreme N DIR-685 может играть роль NAS, сервера печати... и цифровой фоторамки
09.01.2009  Очень тонкая фотокамера Pentax Optio P70 имеет разрешение 12 Мп
09.01.2009  pureSilicon 1TB Nitro - первый в мире 2,5-дюймовый SSD объемом 1 ТБ
09.01.2009  Дебютировали мобильные GPU ATI Mobility Radeon HD 4000
09.01.2009  NVIDIA GeForce GTX 285 и GTX 295 представлены официально
09.01.2009  Scythe выпустила процессорный кулер Mugen 2
09.01.2009  Optio E70 - новая компактная камера Pentax начального уровня
09.01.2009  Новый iPhone получит четырехъядерный процессор?
 
Полезно

 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100