Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алг яз Лаб 4(I-ИСТ).doc
Скачиваний:
1
Добавлен:
14.11.2019
Размер:
195.58 Кб
Скачать

2.4. Сортировка данных

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

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

  • количество присваиваний;

  • количество сравнений.

Все методы сортировки можно разделить на две большие группы:

  • прямые методы сортировки;

  • улучшенные методы сортировки.

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

  1. сортировка вставкой (включением);

  2. сортировка выбором (выделением);

  3. сортировка обменом («пузырьковая» сортировка).

Улучшенные методы сортировки основываются на тех же принципах, что и прямые, но используют некоторые оригинальные идеи для ускорения процесса сортировки. Прямые методы на практике используются довольно редко, так как имеют относительно низкое быстродействие. Однако они хорошо показывают суть основанных на них улучшенных методов. Кроме того, в некоторых случаях (как правило, при небольшой длине массива и/или особом исходном расположении элементов массива) некоторые из прямых методов могут даже превзойти улучшенные методы.

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

Принцип метода

Массив разделяется на две части: отсортированную и неотсортированную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве неотсортированной части – все остальные.

Таким образом, алгоритм будет состоять из (n-1)-го прохода (n – размерность массива), каждый из которых будет включать четыре действия:

  • взятие очередного i-го неотсортированного элемента и сохранение его в дополнительной переменной;

  • поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов;

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

  • вставка взятого элемента в найденную j-ю позицию.

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

  • выбор текущего элемента из отсортированной части массива;

  • сравнение текущего элемента со значением, сохраненным в дополнительной переменной;

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

Пример:

3

1

9

2

5

7

1

3

9

2

5

7

1

3

9

2

5

7

1

2

3

9

5

7

1

2

3

5

9

7

1

2

3

5

7

9

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

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