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

Линейный выбор (сортировка выбором)

Согласно методу сортировки линейным выбором, начиная с первой записи таблицы (i=1), осуществляется поиск записи, имеющей наименьшее значение ключа (j=i, i+1, …n). После того, как эта запись найдена, она меняется местами с первой записью таблицы. В результате такой перестановки запись с наименьшим значением ключа помещается в первую позицию и в дальнейшем не рассматривается. Если же наименьшее значение ключа, имеет первая запись, то перестановка не нужна. Затем, начиная со второй записи таблицы (i=2), осуществляется поиск второго наименьшего ключа. Найденная запись меняется местами со второй записью. Этот процесс заканчивается поиском места для предпоследней записи таблицы (i=n-1). После этого все записи будут расположены в порядке возрастания кодов ключа.

Число сравнений в данном методе равно (в среднем порядка ). Максимальное количество перестановок – (n-1), причем эти величины не зависят от исходного состояния ключей.

В качестве примера рассмотрим сортировку таблицы со следующими значениями ключей:

23 11 4 56 9 35 7

Ниже показаны этапы сортировки (перемещаемые элементы подчеркнуты):

1: 23 11 4 56 9 35 7

2: 4 11 23 56 9 35 7

3: 4 7 23 56 9 35 11

4: 4 7 9 56 23 35 11

5: 4 7 9 11 23 35 56

6: 4 7 9 11 23 35 56

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

Линейный выбор с подсчетом

Число перестановок, необходимое для сортировки выбором, можно значительно сократить, если использовать для каждого ключа счетчик относительной позиции (метод линейного выбора с подсчетом). При такой модификации требуется дополнительная память для результирующей (упорядоченной) таблицы и массива счетчиков.

Просмотр таблицы начинается с первой записи (i=1,2, …n-1). Ее ключ сравнивается с ключами последующих записей (j=i+1, i+2,…n). При этом счетчик большего из сравниваемых ключей увеличивается на 1. При втором просмотре таблицы первый ключ уже не рассматривается, второй ключ сравнивается со всеми последующими. Результаты сравнений фиксируются в счетчиках.

Для таблицы, содержащей n записей, этот процесс повторяется (n-1) раз. После выполнения всех просмотров счетчик каждого элемента указывает, какое количество ключей таблицы меньше ключа этого элемента. Эти счетчики используются затем в качестве индексов элементов результирующей таблицы. Поместив записи в результирующую таблицу в соответствии со значениями их счетчиков, получим упорядоченную таблицу. В процессе сортировки выполняется (n-1) просмотров таблицы с n/2 сравнениями в среднем при каждом просмотре. Значения счетчиков изменяются столько раз, сколько выполняется сравнений. Рассмотрим пример использования этого метода. Ключи записей и массив счетчиков имеют вид:

Индексы

Ключи

Счетчики

0

9

0

1

5

0

2

10

0

3

2

0

Изменение массива счетчиков в результате просмотров:

1-й

просмотр

2-й

просмотр

3-й

просмотр

Результирующая таблица (ключи)

2

2

2

2

0

1

1

5

1

2

3

9

0

0

0

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]