- •35 Жегуло а.И. Компьютерные науки 2010-2011 гг. Компьютерные науки Лекции для студентов 1 курса, 2010-2011 уч. Г., семестр 1
- •1. Основные понятия 3
- •2. Введение в язык программирования Pascal 3
- •7. Массивы 16
- •8. Сортировки массивов 22
- •9. Рекурсия 25
- •1. Символьные и строковые типы данных 31
- •Основные понятия
- •Способы описания алгоритма:
- •Введение в язык программирования Pascal
- •Структура программы на языке Pascal
- •Правила записи программ
- •Стиль программирования
- •Переменные и константы. Понятие типа данных
- •Классификация типов данных
- •Стандартные простые типы данных
- •Целые типы
- •Вещественные типы
- •Логические (булевские) типы
- •Перечисляемые типы
- •Интервальные типы
- •Порядковые типы
- •Описание данных
- •Описание переменных
- •Описание констант
- •Описание типизированных констант
- •Выражения
- •Операции отношения
- •Приоритеты операций
- •Арифметические выражения
- •Логические выражения
- •Операторы
- •Оператор присваивания
- •Оператор ввода с клавиатуры
- •Оператор вывода на экран монитора
- •Форматный вывод
- •Условный оператор (оператор альтернативы)
- •Составной оператор
- •Оператор выбора
- •Оператор цикла с предусловием while
- •Оператор цикла с постусловием repeat
- •Оператор цикла for с параметром
- •Вложенные циклы
- •Взаимозаменяемость циклов различных видов
- •Дополнительные конструкции переходов для циклов
- •«Вечные» циклы
- •Простейшие алгоритмы
- •Вычисление суммы и произведения
- •Организация счетчика
- •Нахождение наибольшего и наименьшего значений
- •Рекуррентные последовательности
- •Итерационные алгоритмы
- •Подпрограммы (процедуры и функции)
- •Понятие подпрограммы, ее описания и вызова
- •Цели введения подпрограмм
- •Способы передачи параметров. Виды параметров
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Корректность передачи параметров
- •Досрочное завершение работы программы и подпрограммы
- •Реализация вызова подпрограммы
- •Область действия и время жизни идентификаторов
- •Правила видимости
- •Время жизни идентификаторов
- •Побочный эффект функции
- •Массивы
- •Описание переменных-массивов
- •Обозначение элементов массива
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Типизированные константы-массивы
- •Операции над массивами
- •Именная эквивалентность типов
- •Передача массива в качестве параметра
- •Открытые массивы
- •Типичные задачи для одномерных массивов
- •Поиск заданного элемента в массиве
- •Анализ методов поиска по количеству операций сравнения
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Сортировки массивов
- •Понятие сортировки
- •Параметры оценки алгоритмов
- •Сортировка простым включением (простыми вставками) Принцип сортировки включением
- •Сортировка простым выбором Принцип сортировки выбором
- •Сортировка простым обменом (метод пузырька) Принцип сортировки обменом
- •Сравнение эффективности базовых методов сортировки
- •Использование индексных массивов при сортировке
- •Рекурсия
- •Что такое рекурсия
- •Рекурсивные подпрограммы
- •Прямая и косвенная рекурсия
- •Предварительное (опережающее) описание подпрограммы
- •Опасности рекурсии
- •Бесконечная рекурсия
- •Итерация и рекурсия. Необоснованное применение рекурсии
- •Глубокая рекурсия
- •Когда использовать рекурсию
- •Формы рекурсивных подпрограмм
- •Примеры рекурсивных программ
- •Ввод последовательности целых чисел, заканчивающейся нулем, вывод в обратном порядке
- •Поиск максимального элемента массива
- •Задача о Ханойских башнях
- •Символьные и строковые типы данных
- •Символьные типы данных
- •Представление символов в памяти компьютера
- •Символьные константы и переменные Неименованные символьные константы
- •Стандартные функции над символами
- •Строковые типы данных
- •Строковые типы. Представление строк в памяти компьютера
- •Стандартные функции и процедуры для строк
- •Выделение слов из строки
-
Сортировка простым обменом (метод пузырька) Принцип сортировки обменом
В самом начале отсортированная часть массива пустая. В неотсортированной части справа налево выбираются и сравниваются пары соседних элементов. Если расположение в паре не соответствует условию упорядоченности, то элементы меняются местами.
Первый проход заканчивается тем, что самый «легкий» среди всех элементов «всплывает» на место с индексом 1. На втором проходе он уже не участвует, т.к. входит в отсортированную часть. Затем на место с индексом 2 «всплывает» самый легкий среди оставшихся неотсортированных элементов. Поэтому сортировку обменом называют еще «методом пузырька». Всего будет сделан N-1 проход.
Данный метод несимметричен: за один проход самый легкий элемент «всплывает» в начало массива, а более тяжелые сдвигаются на одну позицию к концу массива.
I=1 / 5 11 3 7 1 – исходный массив
I=2 1 / 5 11 3 7
I=3 1 3 / 5 11 7
I=4 1 3 5 / 7 11 – отсортированный массив
procedure BubbleSort(var A:vector); {Сортировка простым выбором, или метод "пузырька"}
var i,j,x: integer;
begin
for i:=2 to n do
for j:=n downto i do
if A[j-1]>A[j]
then begin
x:=A[j-1];
A[j-1]:=A[j];
A[j]:=x
End
end;
-
Сравнение эффективности базовых методов сортировки
При анализе эффективности подсчитывают количество операций сравнения и пересылки. Обозначим:
С – количество операций сравнения элементов массива,
М – количество операций перестановки. O(n) – количество операций порядка n, O(n2) – порядка n2.
Массив |
Метод включения |
Метод выбора |
Метод обмена |
|||
С |
М |
С |
М |
С |
М |
|
Массив отсортирован |
O(n) |
O(n) |
O(n2) |
O(n) |
O(n2) |
0 |
Обычный массив |
O(n2) |
O(n2) |
O(n2) |
O(n log2 n) |
O(n2) |
O(n2) |
Массив отсортирован в обратном порядке |
O(n2) |
O(n2) |
O(n2) |
O(n2) |
O(n2) |
O(n2) |
-
Сортировка простым включением: Наилучшая эффективность среди всех методов, если исходный массив частично отсортирован.
-
Сортировка простым выбором: Наилучшая эффективность в среднем.
-
Сортировка простым обменом («пузырек»): Наихудшая эффективность в среднем.
-
Использование индексных массивов при сортировке
Любой метод сортировки включает две операции:
-
сравнение ключей, по которым идет сортировка;
-
перестановка элементов местами.
Все рассмотренные методы сортировок сортировали массивы, состоящие только из ключей.
Рассмотрим задачу сортировки строк матрицы по значениям первых элементов строк. Можно отказаться при сортировке от перестановки строк, заменив ее перестановкой индексов строк.
Ind 1 2 3 4 |
Матрица
5 1 1 3 2 2 12 3 3 7 4 4 |
Сортировка |
Ind 2 1 4 3 |
Матрица
5 1 1 3 2 2 12 3 3 7 4 4 |
Выведенная матрица
3 2 2 5 1 1 7 4 4 12 3 3 |
Воспользуемся вспомогательным массивом Ind, который назовем индексным, т.к. он будет содержать индексы строк матрицы. Перед началом сортировки индексный массив заполняется последовательными номерами индексов Ind = 1 2 3...N.
Вместо перестановки строк, например, с индексами j-1 и j, будем переставлять элементы индексного массива Ind[j-1] и Ind[j].
Теперь результатом сортировки будет не отсортированная исходная матрица, а отсортированный массив индексов Ind, показывающий, в каком порядке следует брать строки исходной матрицы, чтобы получить отсортированную матрицу.
program Bubble_Ind_Sort; //Сортировка «пузырьком» с использованием индексного массива
Const m=10; n=50;
Var A: array[1..m;1..n] of integer;
Ind: array[1..m] of integer; //Длина индексного массива равна числу строк матрицы
i,j,x: integer;
begin
//Ввод данных в исходную матрицу A} . . . . . .
for i:=1 to m do Ind[i]:=i; //Начальное заполнение индексного массива
for i:=2 to m do //Начало сортировки
for j:=m downto i do
if A[Ind[j-1],1] >A[Ind[j],1]
then begin //Перестановка местами элементов индексного массива
x:=Ind[j-1];
Ind[j-1]:=Ind[j];
Ind[j]:=x
end;
for i:=1 to m do //Вывод отсортированной матрицы по строкам
begin for j:=1 to n do
write(A[Ind[i], j]:6)
writeln
end
end.