- •Программирование на языке Pascal введение
- •Этапы разработки программ
- •Ядро Турбо Паскаль
- •Среда программирования Турбо паскаль
- •Функциональные клавиши
- •2.3. Текстовый редактор
- •Запуск и отладка программы
- •Элементы языка
- •3.1. Алфавит
- •3.2. Зарезервированные слова и идентификаторы
- •3.3. Общая структура программ в Турбо Паскаль
- •3.4. Основные типы данных. Простые типы
- •Основные операторы языка программирования Турбо Паскаль
- •4. 1. Ввод – вывод информации в Турбо Паскаль
- •4.2. Математические операции, встроенные математические функции Турбо Паскаль
- •4.3. Пустой оператор и составной оператор
- •4.4. Условный оператор
- •4.5. Оператор выбора
- •4.6. Операторы повторений
- •5. Символьные типы данных
- •6. Строковые типы данных
- •Стандартные процедуры и функции для строк
- •7. Структурированные типы данных. Массивы
- •7. 1. Одномерные массивы
- •Доступ к элементам массива
- •7.2. Сортировка массивов
- •7.2.1. Сортировка вставкой
- •7.2.2. Сортировка выбором
- •7.2.3. Сортировка обменом (пузырьковая сортировка)
- •7.3. Многомерные массивы
- •8. Записи
- •9. Множества
- •10. Типизированные константы
- •10.1. Константы простых типов и типа string
- •10.2. Константы-массивы
- •10.3. Константы-записи
- •10.4. Константы-множества
- •Литература
7.2. Сортировка массивов
Все методы сортировки можно разделить на две большие группы:
прямые методы сортировки;
улучшенные методы сортировки.
Прямые методы сортировки по принципу, лежащему в основе метода, в свою очередь разделяются на три подгруппы:
Сортировка вставкой (включением).
Сортировка выбором (выделением).
Сортировка обменом («пузырьковая» сортировка).
Улучшенные методы сортировки основываются на тех же принципах, что и прямые, но используют некоторые оригинальные идеи для ускорения процесса сортировки. Прямые методы на практике используются довольно редко, так как имеют относительно низкое быстродействие. Однако они хорошо показывают суть основанных на них улучшенных методов. Кроме того, в некоторых случаях (как правило, при небольшой длине массива и/или особом исходном расположении элементов массива) некоторые из прямых методов могут даже превзойти улучшенные методы.
7.2.1. Сортировка вставкой
Принцип метода:
Массив разделяется на две части: отсортированную и неотсортированную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве неотсортированной части –все остальные элементы.
Таким образом, алгоритм будет состоять из n-1 –го прохода (n –размерность массива), каждый из которых будет включать четыре действия:
взятие очередного i-го неотсортированного элемента и сохранение его в дополнительной переменной;
поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов;
сдвиг элементов массива от i-1-го до j-1-го вправо, чтобы освободить найденную позицию вставки;
вставка взятого элемента в найденную j-ю позицию.
Программа, реализующая рассмотренный алгоритм, будет иметь следующий вид:
Program InsertionSort;
uses Ctr;
const
n = 20; {длина массива}
type
TVector = array [1…n] of Real;
var
Vector: TVector;
B: Real;
I, j, k: Integer;
begin
ClrScr;
Writeln ('Введите элементы массива:');
for i :=1 to n do
Read (Vector[i]);
Readln;
{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ }
for i :=2 to n do
begin
B:= Vector[i]; {Взятие неотсортированного элемента}
{Цикл поиска позиции вставки}
j: = 1;
while (B > Vector [j]) do
j:= j + 1; {После окончания цикла индекс}
{j фиксирует позицию вставки}
{ Цикл сдвига элементов для освобождения позиции вставки }
for k := i-1 downto j do
Vector [k +1] := Vector [k] ;
{Вставка взятого элемента на найденную позицию}
Vector [j] := B;
end;
{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _}
Writeln (' Отсортированный массив : ');
for i :=1 to n do
Write (Vector [i] :8 :2);
Writeln;
End.
