Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
12.05.2015
Размер:
4.21 Mб
Скачать

Задача сортировки

1

(in situ

Сортировка упорядочение данных

Методы упорядочения подразделяются на внутренние (обрабатывающие массивы) и внешние (занимающиеся только файлами)

Эту лекцию мы посвятим только внутренним сортировкам. Их важная особенность состоит в том, что эти алгоритмы не требуют дополнительной памяти: вся работа по упорядочению производится внутри одного и того же массива

).

2

Цель лекции: изучить основные

алгоритмы сортировок, научиться решать задачи сортировок массивов различными методами и выполнять оценку эффективности алгоритмов сортировки.

Эффективность сортировки определяется её быстродействием.

Быстродействие определяется количеством необходимых сравнений и перестановок елементов. При этом необходимо помнить, что перестановки занимают больше времени, чем сравнений.

3

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

К простым внутренним сортировкам относят методы, сложность которых пропорциональна квадрату размерности входных данных - С*N2 действий,

где С - некоторая константа, N - размерность

Количество действий, необходимых для упорядочения некоторой последовательности данных зависит не только от длины этой последовательности, но и от ее структуры.

Сложность алгоритмов подсчитывают раздельно по количеству сравнений и по количеству перемещений данных в памяти (пересылок), Общую же эффективность алгоритма обычно оценивают "в среднем": как среднее арифметическое от сложности алгоритма "в лучшем случае" и "в худшем случае", то есть (Eff_best + Eff_worst)/2.

4

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

Три основные классы сортировки массивов in situ:

1. сортировка методом "пузырька" (простого обмена);

2. сортировка методом простого выбора (простой перебор);

3. сортировка методом простого включения (вставки: сдвиг-

вставка, вставками, вставка и сдвиг). 5

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

вставками (включением)

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

Самый простой способ сортировки, который приходит в голову, - это упорядочение данных по мере их поступления.

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

6

7

Алгоритм простыми

вставками (включением)

1.Первый элемент записать "не раздумывая".

2.Пока не закончится последовательность вводимых данных, для каждого нового ее элемента выполнять следующие действия:

-начав с конца уже существующей упорядоченной

последовательности, все ее элементы, которые больше (меньше), чем вновь вводимый элемент, сдвинуть на 1 шаг назад;

- записать новый элемент на освободившееся место.

(На каждом шаге алгоритма выбираем один из

 

элементов входных данных и вставляем его на

 

нужную позицию в уже отсортированной

 

последовательности до тех пор, пока набор

 

входных данных не будет исчерпан)

8

Алгоритм простыми

вставками (включением)

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

44 55 12 42 94 18 06 67

i=2

44 55 12 42 94 18 06 67

i=3

12 44 55 42 94 18 06 67

i=4

12 42 44 55 94 18 06 67

i=5

12 42 44 55 94 18 06 67

i=6

12 18 42 44 55 94 06 67

i=7

06 12 18 42 44 55 94 67

i=8

06 12 18 42 44 55 67 94

9

Реализация алгоритма простыми вставкам

(включением StraightInsertion)

 

for i:= 2 to N do

 

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

 

Begin

 

x:= a[i];

 

j:= i-1;

 

while (j>0)and(a[j]>x) do

 

begin

 

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

 

j:= j-1;

 

end;

 

a[j+1]:= x;

 

end;

10