Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы сортировки.doc
Скачиваний:
35
Добавлен:
05.11.2018
Размер:
228.35 Кб
Скачать

Псевдокод

Перечислим основные соглашения, которые мы будем использовать. 1. Отступ от левого поля указывает на уровень вложенности. Например. тело цикла for (строка 1) состоит из строк 2-8, а тело цикла while (строка 5) содержит строки 6-7, но не 8. Это же правило применяется и для if-then-else. Это делает излишним специальные команды типа begin и end для начала и конца блока. (В реальных языках программирования такое соглашение применяется редко, поскольку затрудняет чтение программ, переходящих со страницы на страницу.)

2. Циклы while, for, repeat и условные конструкции if, then, else имеют тот же смысл, что и в Паскале.

3. Символ о начинает комментарий (идущий до конца строки).

4. Одновременное присваивание ij  е (переменные i и j получают значение е) заменяет два присваивания j ^– е и г <– j (в этом порядке).

5. Переменные (в данном случае i, j, key) локальны внутри процедуры (если не оговорено противное).

6. Индекс массива пишется в квадратных скобках: А[j] есть j-й элемент в массиве А. Знак «..» выделяет часть массива: А[i..j] обозначает участок массива А, включающий А[i], А[i+1],...., A[j].

7. Часто используются объекты (objects), состоящие из нескольких полей (fields), или, как говорят, имеющие несколько атрибутов (attributes). Значение поля записывается как имя-поля[имя-объекта]. Например, длина, массива считается его атрибутом и обозначается lengthy так что длина массива А запишется как length[A\. Из контекста обычно ясно, что именно обозначают квадратные скобки (элемент массива или поле объекта).

Переменная, обозначающая массив или объект, считается указателем на составляющие его данные. После присваивания у <- х для любого поля / выполнено f[y] = f[x}. Более того, если мы теперь выполним оператор f[:r} <– 3, то будет не только f[x} = 3, но и f[y] = 3, поскольку после у <– х неременные х и у указывают на один и тот же объект.

Указатель может иметь специальное значение NIL, не указывающее ни на один объект.

8. Параметры передаются по значению (by value): вызванная процедура получает собственную копию параметров; изменение параметра внутри процедуры снаружи невидимо. При передаче объектов копируется указатель на данные, составляющие этот объект, а сами поля объекта–нет. Например, если х -параметр процедуры, то присваивание х  у, выполненное внутри процедуры, снаружи заметить нельзя, а присваивание f[x] = 3 – можно.

Заметим в заключение, что термины «алгоритм», «программа» и «процедура» часто используются вперемешку.

1.2. Анализ алгоритмов

Рассматривая различные алгоритмы решения одной и той же задачи, полезно проанализировать, сколько вычислительных ресурсов они требуют (время работы, память), и выбрать наиболее эффективный. Конечно, надо договориться о том, какая модель вычислений используется, В этой книге в качестве модели по большей части используется обычная однопроцессорная машина с произвольным доступом (random-access machine. RAM), не предусматривающая параллельного выполнения операций. (Мы рассмотрим некоторые модели параллельных вычислений в последней части книги.)