- •Общая функциональная схема эвм
- •Языки программирования
- •Этапы решения задач на эвм
- •Понятие алгоритма и его свойства
- •Типы алгоритмов
- •Ос эвм. Понятие о файловой системе
- •Команды ms dos
- •Программирование на языке паскаль
- •Структура программы на языке паскаль
- •Описание данных
- •1. Константы
- •2. Переменные
- •Комментарии
- •Операторы языка паскаль
- •Операторы обработки данных
- •1. Операторы ввода
- •2. Операторы вывода
- •3. Вычисление по формулам. Оператор присваивания
- •Линейные программы
- •Управляющие операторы
- •1. Разветвляющиеся алгоритмы. Оператор if (если)
- •2. Пример разветвляющейся программы
- •3. Оператор case
- •Циклические алгоритмы и программы
- •1. Общая схема цикла
- •2. Циклы со счетчиком
- •3. Итерационные циклы
- •3.1. Оператор цикла с пост-условием
- •3.2. Оператор цикла с пред-условием
- •Tипы данных, используемых в паскале
- •1.Представление данных в эвм
- •2. Стандартные функции Паскаля и Турбо Паскаля
- •3. Булевские переменные и выражения
- •4.Функции для работы с символами
- •5. Массивы
- •Примеры программ обработки массивов
- •Особенности алгоритмов и программ с накапливанием
- •Алгоритм нахождения минимума и максимума
- •Задача сортировки
- •Обработка многомерных массивов
- •Итерационные циклы
- •Типовые алгоритмы с итерационными циклами
- •1. Приближенное вычисление функций
- •2. Решение уравнений приближенными методами
- •2.1. Метод Ньютона
- •Программы обработки строк символов (текстов)
- •1. Простейшие алгоритмы и программы обработки строк
- •Типовые программы обработки строк
- •Задача 1 выделения слов из текста (слова разделены одним пробелом)
- •Задача 2 выделения слов из текста (слова разделены несколькими пробелами)
- •Алгоритмы поиска
- •Алгоритм линейного поиска
- •Библиографический список
- •Содержание
Задача сортировки
Сортировка – это расположение чисел в порядке возрастания или убывания.
Наиболее распространенный и простой метод сортировки – метод "пузырька". Он требует минимального объема памяти для данных, но затраты времени на этот метод велики. Суть метода "пузырька" в следующем.
Пусть дано n чисел и необходимо расположить их (для определенности) в порядке возрастания. При упорядочении выполняются следующие операции:
1) Числа сравниваются попарно: первое со вторым; второе с третьим;
i-тое – с (i+1)-ым;
2) Если меньшее стоит в паре на втором месте, то числа меняются местами.
За один такой просмотр массива минимальное число "вытолкнется", по крайней мере, на одно место вверх (вперед), а максимальное – переместится в самый конец (вниз). Т.е. минимальное число как легкий пузырек воздуха в жидкости постепенно "всплывает" в начало последовательности. Отсюда – название метода. За n-1 просмотр произойдет полное упорядочение массива при любом исходном расположении чисел в нем. Рассмотрим работу метода на примере, приведенном на рис. 11.
Рис1.11. Иллюстрация метода сортировки "пузырьком"
Алгоритм сортировки.
1. Ввести n чисел.
2. Для номера просмотра от 1 до n-1.
2.1. Для номера числа(i) от 1 до n-1.
Если число[i] > число[i+1], то поменять их местами.
3. Вывести отсортированную последовательность.
4. Закончить.
Программа для этого алгоритма будет иметь вид:
PROGRAM SORT;
CONST
N=100;
VAR
X:ARRAY [1..N] OF REAL;
A:REAL;
K,I:INTEGER;
BEGIN;
Writeln('Введите массив чисел');
FOR I:=1 TO N DO
READ (X[I]);
{ сортировка }
FOR K:=1 TO N-1 DO
FOR I:=1 TO N-1 DO
IF X[I]>X[I+1]THEN
BEGIN
A:=X[I];
X[I]:=X[I+1];
X[I+1]:=A
END;
Writeln('Отсортированный массив чисел');
FOR I:=1 TO N DO
WRITE (X[I]);
END.
Глубину просмотра можно уменьшать, основываясь на том, что большие числа "опускаются" вниз(в конец последовательности) и затем не переставляются:
FOR K :=1 TO N-1 DO
FOR I:=1 TO N-K DO
IF......
Сокращение количества просмотров дает лучшие временные характеристики. Этого можно достичь, анализируя были ли перестановки на предыдущем просмотре. Если их не было, то можно заканчивать сортировку – данные уже отсортированы. При больших массивах это дает большую экономию времени.
План для этого метода
1. Ввести массив.
2. Признак – перестановка есть.
3. N% просмотра (к)=1.
4. Пока перестановки есть отсортировать массив.
5. Вывести результат.
6. Закончить.
Уточненный план.
1. Ввести массив.
2. Признак - перестановка есть.
3. номер просмотра (к)=1.
4. Пока перестановка есть.
4.1. Количество перестановок =0.
4.2. Для i от 1 до n-k
Если x[i] > x[i+1], то
4.2.1. поменять x[i] и x[i+1]
4.2.2. кол.перест.=кол.перест.+1
4.3. Если кол.перест.=0, то
признак – перестановок.нет.
4.4. к=к+1
5. Для i от 1 до n
Вывести x[i].
6. Закончить.
Программа для этого алгоритма будет иметь вид:
PROGRAM SORTUSK;
CONST
N=100;
VAR
X:=ARRAY [1..N] OF REAL;
A:REAL;
L,K,I:INTEGER;
P: BOOLEAN;
BEGIN
{п.1}
Writeln('Введите массив чисел');
FOR I:=1 TO N DO
READ (X[I]);
{ п.2 }
P:= TRUE; {перестановки будут}
{ п.3 }
K:=1; {номер просмотра}
{ п.4 }
WHILE P DO
BEGIN
{ п.4.1 }
L:=0; {кол. перестановок}
{ п.4.2 }
FOR I:=1 TO N-K DO
IF X[I] > X[I+1] THEN
BEGIN
A:=X[I];
X[I]:=X[I+1];
X[I+1]:=A;
L:=L+1
END;
{ п.4.3 }
IF L=0 THEN
P:=FALSE;
{ п.4.4 }
K:=K+1;
END;
{ п.5 }
Writeln('Отсортированный массив чисел');
FOR I:=1 TO N DO
WRITE(X[I]);
END.
