русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Пример сортировки


Дата добавления: 2013-12-23; просмотров: 812; Нарушение авторских прав


Эффективность алгоритма ПрВыб

Реализация ПрВыб

Алгоритм ПрВыб

Сортировка простым выбором

Эффективность алгоритма БинВст

Реализация алгоритма БинВст

 

for i:= 2 to n do

if a[i-1]>a[i] then

begin x:= a[i];

left:= 1;

right:= n-1;

repeat

sred:= (left+right) div 2;

if a[sred]<x then left:= sred+1

else right:= sred-1;

until left>right;

for j:= i-1 downto left do a[j+1]:= a[j];

a[left]:= x;

end;

 

 

Теперь на каждом шаге выполняется не N, а log N проверок, что уже значительно лучше (для примера, сравните 1000 и 10 = log 1024). Следовательно, всего будет совершено N*log N сравнений. Впрочем, улучшение это не слишком значительное, ведь по количеству пересылок наш алгоритм по-прежнему имеет сложность "порядка N2".

 

Попробуем теперь сократить количество пересылок элементов.

 

 

На каждом шаге (всего их будет ровно N-1) будем производить такие действия:

  • найдем минимум среди всех еще не упорядоченных элементов;
  • поменяем его местами с первым "по очереди" не отсортированным элементом. Мы надеемся, что читателям очевидно, почему к концу работы этого алгоритма последний (N-й) элемент массива автоматически окажется максимальным.

 

for i:= 1 to n-1 do

begin min_ind:= i;

for j:= i+1 to n do

if a[j]<=a[min_ind] {***}

then min_ind:= j;

if min_ind<>i

then begin

x:= a[i];

a[i]:= a[min_ind];

a[min_ind]:= x;

end;

end;

 

 

В лучшем случае (если исходная последовательность уже упорядочена), алгоритм ПрВыб произведет (N-1)*(N+2)/2 сравнений и 0 пересылок данных. В остальных же случаях количество сравнений останется прежним, а вот количество пересылок элементов массива будет равным 3*(N-1).



 

Таким образом, алгоритм ПрВыб имеет квадратичную сложность (~N2) по сравнениям и линейную (~N) - по пересылкам.

 

Замечание. Если перед вами поставлена задача - отсортировать строки двумерного массива (размерности NxN) по значениям его первого столбца, то сложность алгоритма ПрВыб, модифицированного для решения этой задачи, будет квадратичной (N2 сравнений и N2 пересылок), а алгоритма БинВст - кубической (N*log N сравнений и N3 пересылок). Комментарии, как говорится, излишни.

 

 

Предположим, что нужно отсортировать тот же набор чисел, при помощи которого мы иллюстрировали метод сортировки простыми вставками:

 

5 3 4 3 6 2 1

 

Теперь мы будем придерживаться алгоритма ПрВыб (подчеркнута несортированная часть массива, а квадратиком выделен ее минимальный элемент):

 

1 шаг: 5343621

2 шаг: 1343625

3 шаг: 1243635 {***}6)

4 шаг: 1233645{ничего не делаем}

5 шаг: 1233645

6 шаг: 1233465

результат: 1233456



<== предыдущая лекция | следующая лекция ==>
Сортировка бинарными вставками | Алгоритм УлШелл


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.176 сек.