- •Программирование на языке высокого уровня
- •1 Часть Учебное пособие Москва 2007
- •Оглавление
- •1. Основы алгоритмизации
- •1.1. Алгоритмизация и требования к алгоритму
- •1.2. Блок-схемы алгоритмов
- •1.2.1. Способы записи алгоритма
- •1.2.2. Блок-схемы
- •1.2.3. Следование, ветвление, цикл
- •1.3. Этапы разработки программы
- •1.3.1. Язык программирования. Программа
- •1.3.2. Этапы разработки
- •1.4. Ошибки
- •1.4.1. Компилятор. Синтаксис и семантика
- •1.4.2. Типы ошибок
- •2. Алфавит языка Турбо Паскаль. Программа
- •2.1. Идентификаторы
- •2.2. Разделители
- •2.3. Специальные символы
- •2.4. Структура Pascal-программы
- •Пример простейшей программы на языке Pascal
- •3. Типы данных
- •3.1. Структура типов данных
- •3.2. Простые типы
- •3.2.1. Порядковые типы
- •3.2.1.1 Целые типы.
- •3.2.1.1.1. Встроенные процедуры и функции, применимые к целым типам
- •3.2.1.2. Логический тип.
- •3.2.1.3. Символьный тип.
- •3.2.1.4. Перечисляемый тип.
- •3.2.2. Вещественные типы
- •3.3. Константы и переменные
- •3.4. Преобразование типов
- •4. Операторы
- •4.1. Ввод данных
- •4.2. Вывод данных
- •4.3. Составной оператор
- •4.4. Условный оператор
- •4.5. Операторы циклов
- •4.5.1. Оператор for
- •4.5.2. Оператор while
- •4.5.3. Оператор repeat
- •4.5.4. Стандартные функции для циклов
- •4.6. Оператор выбора case
- •5. Массивы
- •5.1 Определение массива
- •5.2. Ввод/вывод одномерного массива (вектора).
- •5.3 Типизированные константы – массивы
- •5.4. Сортировка массивов (ранжирование)
- •6. Процедуры и функции
- •6.1. Подпрограммы
- •6.2. Параметры. Глобальные и локальные описания
- •6.3. Процедуры
- •6.4. Функции
- •6.5. Процедура exit
- •6.6. Рекурсия
- •6.7. Директивы подпрограмм
- •6.8. Открытые массивы
- •7. Записи
- •7.1.Определение и правила записи
- •7.2. Оператор присоединения
- •7.3. Записи с вариантами (экономия пространства)
- •8. Множества
- •8.1. Понятие множества
- •8.2. Конструктор множества
- •8.3. Операции над множествами
- •8.4. Примеры программ, использующих множества.
- •Литература
5.4. Сортировка массивов (ранжирование)
Рассмотрим два метода сортировки: линейную (сортировка отбором) и пузырьковую.
Оба эти метода не очень эффективны и на практике используются редко, но когда надо отсортировать 20-25 чисел, они вполне эффективны.
Пример. Ввести n чисел. Отсортировать по возрастанию значений. Распечатать неранжированный массив (до сортировки) и ранжированный массив (после сортировки).
1). Алгоритм линейной сортировки.
Сравнить каждый элемент массива с MAS[1].
Если этот элемент меньше, то поменять его местами с MAS[1]. Если больше или равен – ничего не делать. Затем повторить этот процесс, начиная с позиции 2 и так до конца ряда.
Пример. N=5.
1 проход
14 105 11 4 21
14 105 11 4 21
11 105 14 4 2
4 105 14 11 21
4 105 14 11 21
2 проход
(4) 105 14 11 21
(4) 14 105 11 21
(4) 11 105 14 21
(4) 11 105 14 21
3 проход
(4) (11) 105 14 21
(4) (11) 14 105 21
(4) (11) 14 105 21
4 проход
(4) (11) (14) 105 21
(4) (11) (14) 21 105
Program sort1;
Type
Size = 1…100;
Mas = array [size] of integer;
Var
Numb : mas;
Pass, I, n : size;
Temp : integer;
Begin
Writeln (’Укажите количество сортируемых элементов’);
Readln(n);
{Ввод массива}
For i:=1 to n-1 do
For pass:=i+1 to n do
If numb[i]>numb[pass] then
Begin
Temp:=numb[i];
numb[i]:= numb[pass];
numb[pass]:= Temp
End;
For i:=1 to n do
Write (numb[i],’ ‘);
Writeln
end.
Независимо от первоначального расположения элементов ряда для их сортировки линейным методом требуется одно и тоже число сравнений.
2) Алгоритм пузырьковой сортировки.
Повторять следующий многоходовой процесс до тех пор, пока не будет зарегистрирован проход, на котором не было ни одной перестановки.
Сравнить смежные элементы (numb[1] с numb[2] …….. numb[n-1] с numb[n]). Если они стоят в обратном порядке, поменять местами.
1 проход
14 105 11 4 21
14 105 11 4 21
14 11 105 4 21
14 11 4 105 21
14 11 4 21 105
2 проход
14 11 4 21 105
11 14 4 21 105
11 4 14 21 105
11 4 14 21 105
11 4 14 21 105
3 проход
11 4 14 21 105
4 11 14 21 105
4 11 14 21 105
4 11 14 21 105
4 11 14 21 105
4 проход
4 11 14 21 105
4 11 14 21 105
4 11 14 21 105
4 11 14 21 105
4 11 14 21 105
Это более изящный метод сортировки. Это – многоходовый процесс попарного сравнения соседних элементов. С каждым проходом в старшие позиции будут последовательно перемещаться элементы с максимальными значениями.
Program sort2;
Type
Size = 1…100;
Mas = array [size] of integer;
Var
Numb : mas;
Pos : size;
Temp : integer;
Switch : boolean;
begin
Writeln (’Укажите количество сортируемых элементов’);
Readln(n);
{Ввод массива}
Repeat
Switch:=false;
For pos:=1 to n-1 do
If numb[pos]> numb[pos+1] then
Begin
switch:= true;
temp:=numb[pos];
numb[pos]:=numb[pos+1];
numb[pos+1]:= temp
End;
Until switch =false
End.