Большие списки

Содержание

Слайд 2

Находим в массиве наибольший элемент и помещаем его в буфер Сдвигаем

Находим в массиве наибольший элемент и помещаем его в буфер
Сдвигаем правую

часть массива на одну ячейку влево
Наибольший элемент из буфера перемещаем в конец массива
Слайд 3

Находим в массиве второй по величине элемент и помещаем его в

Находим в массиве второй по величине элемент и помещаем его в

буфер
Сдвигаем правую часть массива на одну ячейку влево (кроме последнего элемента)
Второй по величине элемент из буфера перемещаем в конец массива на освободившееся место
Слайд 4

К-ый элемент Далее процесс повторяется до расположения к-го по величине элемента на нужном месте К-ый элемент

К-ый элемент

Далее процесс повторяется до расположения к-го по величине элемента на

нужном месте

К-ый элемент

Слайд 5

В массиве задаем опорный элемент “P1” Просматриваем массив слева направо, располагая

В массиве задаем опорный элемент “P1”
Просматриваем массив слева направо, располагая элементы

меньшие P1 слева от него, а большие элементы - справа от него
Исключаем из рассмотрения левую часть массива

P1

К-ый

P1

К-ый

P1

К-ый

Э-ты

Э-ты>P1

Слайд 6

В оставшейся части массива задаем опорный элемент “P2” Просматриваем массив слева

В оставшейся части массива задаем опорный элемент “P2”
Просматриваем массив слева направо,

располагая элементы меньшие P2 слева от него, а большие элементы - справа от него
Исключаем из рассмотрения правую часть массива

P2

К-ый

Э-ты

Э-ты>P2

Слайд 7

Продолжаем этот процесс. Возможны два варианта завершения: На очередной итерации опорный

Продолжаем этот процесс.
Возможны два варианта завершения:
На очередной итерации опорный элемент

Pi располагается на К-ой позиции.
Процесс сокращения интервала идет до логического конца – остается подинтервал из двух элементов, один из которых располагается на К-ой позиции.
Слайд 8

Алгоритмы сортировки Есть последовательность , ... и функция сравнения, которая на

Алгоритмы сортировки

Есть последовательность , ...
и функция сравнения, которая на

любых двух элементах последовательности принимает одно из трех значений: меньше, больше или равно.
Задача сортировки состоит в перестановке членов последовательности таким образом, чтобы выполнялось условие:
для всех i от 0 до n.
Слайд 9

Возможна ситуация, когда элементы состоят из нескольких полей: Если значение функции

Возможна ситуация, когда элементы состоят из нескольких полей:
Если значение функции сравнения

зависит только от поля x , то x называют ключом, по которому производится сортировка.
На практике, в качестве x часто выступает число, а поле y хранит какие-либо данные, никак не влияющие на работу алгоритма.

x

y

Слайд 10

Критерии эффективности работы алгоритмов Время сортировки - основной параметр, характеризующий быстродействие

Критерии эффективности работы алгоритмов

Время сортировки - основной параметр, характеризующий быстродействие алгоритма.
Память

- ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. При оценке используемой памяти не учитывается место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы.
Слайд 11

Устойчивость - устойчивая сортировка не меняет взаимного расположения равных элементов. Расположение

Устойчивость - устойчивая сортировка не меняет взаимного расположения равных элементов.
Расположение дополнительных

полей "a", "b", "c" осталось прежним
Взаимное расположение равных элементов с ключом 1 и дополнительными полями "a", "b", "c" изменилось
Слайд 12

Естественность поведения - эффективность метода при обработке уже отсортированных, или частично

Естественность поведения - эффективность метода при обработке уже отсортированных, или частично

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

Сравнение времени сортировок коричневая линия: сортировка пузырьком; синяя линия: шейкер-сортировка; розовая

Сравнение времени сортировок

коричневая линия: сортировка пузырьком;
синяя линия: шейкер-сортировка;
розовая линия:

сортировка выбором;
желтая линия: сортировка вставками;
голубая линия: сортировка вставками со сторожевым элементом;
фиолетовая линия: сортировка Шелла.
Слайд 14

Быстрая сортировка Метод основан на подходе "разделяй-и-властвуй". Общая схема такова: из

Быстрая сортировка

Метод основан на подходе "разделяй-и-властвуй". Общая схема такова:
из массива

выбирается некоторый опорный элемент a[i],
запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] - вправо,
теперь массив состоит из двух подмножеств, причем левое меньше (либо равно) правого,
для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру.
Слайд 15

Разделение массива На входе массив a[0]...a[N] и опорный элемент p, по

Разделение массива
На входе массив a[0]...a[N] и опорный элемент p, по которому

будет производиться разделение.
Введем два указателя: i и j. В начале алгоритма они указывают, соответственно, на левый и правый конец последовательности.
Будем двигать указатель i с шагом в 1 элемент по направлению к концу массива, пока не будет найден элемент a[i] >= p. Затем аналогичным образом начнем двигать указатель j от конца массива к началу, пока не будет найден a[j] <= p.
Далее, если i <= j, меняем a[i] и a[j] местами и продолжаем двигать i, j по тем же правилам...
Повторяем шаг 3, пока i <= j.
Слайд 16

Исходный массив Первый обмен Второй обмен 6 5 3 9 1

Исходный массив
Первый обмен
Второй обмен

6

5

3

9

1

8

4

5

7

4

3

7

1

9

2

4

3

6

5

3

9

1

8

4

5

7

4

3

7

1

9

2

4

3

6

5

3

9

1

8

4

9

7

4

3

7

1

5

2

4

3

Слайд 17

Третий обмен Четвертый обмен Конечный результат 6 5 3 9 1

Третий обмен
Четвертый обмен
Конечный результат

6

5

3

9

1

8

7

9

7

4

3

4

1

5

2

4

3

1

5

3

9

6

8

7

9

7

4

3

4

1

5

2

4

3

1

5

3

6

9

8

7

9

7

4

3

4

1

5

2

4

3

Слайд 18

Конечный результат Разделённые массивы Для разделённых массивов процедура повторяется 1 5

Конечный результат
Разделённые массивы
Для разделённых массивов процедура повторяется

1

5

3

6

9

8

7

9

7

4

3

4

1

5

2

4

3

1

5

3

6

9

8

7

9

7

4

3

4

1

5

2

4

3

Первый массив

Второй массив

Слайд 19

Общее быстродействие метода - хорошее. Метод неустойчив. Поведение довольно естественно, если

Общее быстродействие метода - хорошее.
Метод неустойчив.
Поведение довольно естественно, если

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

Сортировка слиянием Сортировка слиянием также построена на принципе "разделяй-и-властвуй", однако реализует

Сортировка слиянием

Сортировка слиянием также построена на принципе "разделяй-и-властвуй", однако реализует его

несколько по-другому, нежели быстрая сортировка.
Вместо разделения по опорному элементу массив просто делится пополам.
Слайд 21

Рекурсивный алгоритм обходит получившееся дерево слияния в прямом порядке. Каждый уровень

Рекурсивный алгоритм обходит получившееся дерево слияния в прямом порядке. Каждый уровень

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

Исходный массив Первый проход – пары Второй проход – четвёрки 3

Исходный массив
Первый проход – пары
Второй проход – четвёрки

3

7

2

8

4

6

1

5

3

7

8

2

4

6

1

5

Слайд 23

Третий проход – восьмёрки Процесс слияния в буфер 2 3 7

Третий проход – восьмёрки
Процесс слияния в буфер

2

3

7

8

1

4

5

6

1

4

5

6

2

3

7

8