Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Улучшенные сортировки

Пузырьковая сортировка

Сортировка вставкой

Сортировка вставкой позволяет упорядочить данные по мере их поступления. В этом случае при вводе каждого нового значения можно опираться на тот факт, что все предыдущие элементы уже образуют отсортированную последовательность. Таким образом, каждый очередной элемент продвигается назад до тех пор, пока не окажется на месте.

Алгоритм для сортировки массива из N элементов.

1. Начинаем сортировку со 2-го элемента: i:=2.

2. Запоминаем в отдельную переменную temp значение i -го элемента.

3. Начинаем поиск места нового элемента с позиции j = i -1.

4. Если j >0 и j -ый элемент больше temp, то помещаем j -ый элемент на позицию j +1, уменьшаем значение j на 1 и возвращаемся к шагу 4.

5. Помещаем значение temp на позицию j +1.

6. Если i < N, то увеличиваем значение i на 1 и возвращаемся к шагу 2.

7. Конец алгоритма. Массив отсортирован.

Пример: алгоритм сортировки вставкой массива str

for i:= 2 to n do

begin

temp:= str[ i ];

j:= i-1;

while (j>=1) and (str[ j ]>temp) do

begin

str[j+1]:= str[j];

dec(j);

end;

str[j+1]:= temp;

end;

Еще одна простая сортировка, которая будет рассмотрена в данном параграфе, – это пузырьковая сортировка, которая относится к категории обменных. Здесь периодически просматривается массив и обмениваются, если нужно, близлежащие элементы – до тех пор, пока никаких обменов не потребуется.

Алгоритм для сортировки массива из N элементов.

1. Начинаем сортировку до N -го элемента: i:= N.

2. Начинаем просматривать элементы со 2-го: j:=2.

3. Если элемент j -1 больше элемента j, то меняем их местами.

4. Увеличиваем значение j на 1 (inc(j)).

5. Если j < i, то переходим к шагу 3.

6. Уменьшаем значение i на 1 (dec(i))

7. Если i > 1, то возвращаемся к шагу 2.

8. Конец алгоритма. Массив отсортирован.

Пример: алгоритм пузырьковой сортировки массива str

for i:= n downto 2 do

for j:=2 to i do

if str[ j-1 ] > str[ j ] then

begin

t:= str[ j-1 ];

str[ j-1 ]:= str[ j ];

str[ j ]:= t;

end;

В отличие от простых сортировок, имеющих сложность ~N2, к улучшенным сортировкам относятся алгоритмы с общей сложностью ~N*logN.

Необходимо, однако, отметить, что на небольших наборах сортируемых данных (N <100) эффективность быстрых сортировок не столь очевидна: выигрыш становится заметным лишь при больших N. Следовательно, если необходимо отсортировать маленький набор данных, то выгоднее взять одну из простых сортировок.

Среди улучшенных сортировок можно выделить сортировки Шелла, пирамидальную и др.

Существует так называемая «Быстрая сортировка», имеющая среднюю сложность порядка N*logN, являющаяся усовершенствованием обменных сортировок. Реализация такой сортировки наиболее удобна в рекурсивном варианте.

Подробнее с указанными и другими видами сортировок можно познакомиться в специальной литературе.

<== предыдущая лекция | следующая лекция ==>
Сортировка выбором | Операции над строками
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 280; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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