- •Введение
- •1. Введение в программирование и основы алгоритмизации
- •1.1. Основные виды программ
- •1.2. Классификация языков программирования
- •1.3. Классификация программных средств
- •1.4. Определение жизненного цикла пс и его этапы
- •1.5. Основные типы и способы представления алгоритмов
- •1.6. Стиль программирования
- •1.7. Комментарии, идентификаторы, оформление программ
- •1.8. Виды ошибок и способы их обнаружения
- •1.9. Документирование программных систем
- •1.10. Сопровождение программных средств
- •2. Программирование на алгоритмическом языке паскаль
- •2.1. Основные приемы работы в Турбо Паскаль
- •2.2. Структура программы и алфавит языка Турбо Паскаль
- •2.3. Выражения и операции языка Паскаль
- •2.4. Типы данных языка Паскаль
- •2.5. Простейшие операторы языка Паскаль
- •2.6. Операторы организации циклов
- •2.7. Методы сортировки
- •2.8. Записи и файлы
- •2.9. Программирование с использованием функций и процедур
- •2.10. Указатели и динамическая память
- •2.11. Динамические списковые структуры
- •2.12. Использование модулей
- •Interface
- •Implementation
- •Interface
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •3. Основы программирования в среде delphi
- •3.1. Элементы среды разработчика
- •3.2. Основы визуального программирования
- •3.3. Структура программы на Delphi
- •Interface
- •Implementation
- •Interface
- •Implementation
- •3.4. Реализация принципов объектно-ориентированного программирования в Delphi
- •3.5. Форма и ее свойства
- •3.6. Простейшие компоненты Delphi
- •3.7. Переключатели, списки и контейнеры
- •3.8. Работа с текстом и изображениями
- •3.9. Создание меню и диалогов
- •3.10. Работа со строковыми таблицами
- •3.11. Деревья и списки
- •3.12. Построение графиков
- •3.13. Закладки и страницы
- •Заключение
- •Библиографический список
- •Оглавление
2.7. Методы сортировки
Сортировка – упорядочивание элементов списка, последовательности или массива в соответствии с каким-либо признаком. Если упорядочивается числовая последовательность, то ее можно отсортировать по возрастанию или убыванию, если символьная – то в прямом или обратном алфавитном порядке.
Одной из наиболее часто встречающихся в программировании задач является сортировка массива по возрастанию или убыванию. В общем случае, когда элементы массива представляют собой неупорядоченную последовательность, можно воспользоваться тремя основными алгоритмами сортировки:
– сортировка методом пузырька;
– сортировка методом поиска минимума (максимума);
– сортировка вставками.
Наиболее простой является сортировка методом пузырька.
Сортировка методом пузырька.
Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает – массив отсортирован. При проходе алгоритма, элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма.
В качестве примера рассмотрим сортировку по возрастанию массива из 10 целых чисел. Массив формируется датчиком случайных чисел, генерирующим значения от 0 до 9.
var
i, j, n, t: integer;
a: array [1..10] of integer;
begin
{Инициализация датчика случайных чисел}
randomize;
n := 10;
{Заполнение массива и вывод его на экран}
for i := 1 to n do
a[i] := Random(10);
WriteLn('Исходный массив');
for i:=1 to n do
Write(a[i],' ');
WriteLn;
{Сортировка массива методом пузырька}
for i:=1 to n-1 do
for j:=1 to n-i do
if a[j]>a[j+1] then
begin
t:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
end;
{Вывод на экран отсортированного массива}
WriteLn('Отсортированный массив');
for i:=1 to n do
Write(a[i],' ');
WriteLn;
ReadLn;
end.
Сортировка методом поиска минимума (максимума).
В данной сортировке используется методика поиска минимума (если упорядочить надо по возрастанию) или максимума (если упорядочить надо по убыванию) среди элементов массива.
Основная идея алгоритма следующая: на i-м шаге итерации среди элементов массива a[i]…a[n] ищется минимальный (максимальный) элемент массива и меняется местами с a[i]. На следующем шаге i увеличивается на единицу и процедура поиска повторяется. Всего надо сделать n-1 итераций, где n – число элементов массива.
При использовании данного алгоритма сортировки предыдущая задача будет выглядеть следующим образом:
var
i, j, n, t, min: integer;
a: array [1..10] of integer;
begin
{Инициализация датчика случайных чисел}
randomize;
n := 10;
{Заполнение массива и вывод его на экран}
for i:=1 to n do
a[i]:=Random(10);
WriteLn('Ishodnyi massiv');
for i:=1 to n do
Write(a[i],' ');
WriteLn;
{Сортировка массива методом поиска минимума}
for i:=1 to n-1 do
begin
min:=a[i];
for j:=i+1 to n do
if min>a[j] then
begin
min:=a[j];
t:=a[j];
a[j]:=a[i];
a[i]:=t;
end;
end;
{Вывод на экран отсортированного массива}
WriteLn('Otsortirovannyi massiv');
for i:=1 to n do
Write(a[i],' ');
WriteLn;
ReadLn;
end.
Сортировка методом вставки.
В данном алгоритме используется методика «вставки» очередного элемента массива в уже отсортированную часть массива в нужную позицию.
Основная идея следующая: на i-ом этапе итерации производится вставка j-того элемента массива в нужную позицию среди элементов a[1], a[2],. . ., a[j-1], которые уже упорядочены (j = i - 1). После этой вставки первые j элементов массива a будут упорядочены.
При использовании данного алгоритма сортировки предыдущая задача будет выглядеть следующим образом:
var
i,j,n, key: integer;
a: array [1..10] of integer;
begin
{Инициализация датчика случайных чисел}
randomize;
n:=10;
{Заполнение массива и вывод его на экран}
for i := 1 to n do
a[i] := Random(10);
WriteLn('Исходный массив');
for i := 1 to n do
Write(a[i],' ');
WriteLn;
{Сортировка массива методом вставки}
for i := 2 to n do
begin
key:=a[i];
j := i – 1;
while (j >= 1) and (a[j] > key) do
begin
a[j+1] := a[j];
j := j – 1;
a[j+1] := key;
end;
end;
{Вывод на экран отсортированного массива}
WriteLn('Otsortirovannyi massiv');
for i := 1 to n do
Write(a[i],' ');
WriteLn;
ReadLn;
end.
