
Тема 2.3. Основы структурного программирования
План
1. Введение
2. Сортировка пузырьковым методом
3. Сортировка выбором
4. Сортировка вставкой
5. Заключение
-
Введение
Среди задач, решаемых программистами, наибольшее распространение получили задачи сортировки данных. Подпрограммы сортировки и поиска используются фактически во всех программах, работающих с базами данных, а также в компиляторах, интерпретаторах и в операционных системах.
Сортировка представляет собой процесс упорядочения множества подобных информационных объектов в порядке возрастания или убывания их значений.
Имеется три способа сортировки массивов:
-
сортировка обменом;
-
сортировка выбором;
-
сортировка вставкой.
-
Сортировка пузырьковым методом
Наиболее известной является сортировка пузырьковым методом. Ее популярность объясняется запоминающимся названием и простотой алгоритма. Сортировка пузырьковым методом использует метод обменной сортировки. Она основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов. Ее название происходит из-за подобия процессу движения пузырьков в резервуаре с водой, когда каждый пузырек находит свой собственный уровень.
Рассмотрим пример процедуры, которая выполняет сортировку элементов массива пузырьковым методом.
type
DataItem = char;
DataArray = array [1..80] of DataItem;
…
{ сортировка пузырьковым методом }
procedure Bubble(var item: DataArray; count:integer);
var
i,j: integer;
x: DataItem;
begin
for i := 2 to count do
begin
for j := count downto i do
if item[j-1]>item[j] then
begin
x := item[j-1];
item[j-1] := item[j];
item[j] := x;
end;
end;
end; {конец сортировки пузырьковым методом}
В этом случае переменная “item” является массивом элементов “DataItem”, который сортируется, а переменная “count” содержит число элементов в массиве. Сортировка пузырьковым методом имеет два цикла. Поскольку число элементов массива задается переменной “count”, внешний цикл вызывает просмотр массива count 1 раз. Это обеспечивает нахождение каждого элемента в своей позиций после завершения процедуры. Внутренний цикл предназначен для фактического выполнения операций сравнения и обмена. Эта версия сортировки пузырьковым методом может сортировать символьный массив в порядке возрастания значений элементов. Для иллюстрации работы сортировки пузырьковым методом ниже даны результаты каждого этапа сортировки массива "dcab".
Исходное положение: d c a b.
-
первый проход: a d c b;
-
второй проход: a b d c;
-
третий проход: a b c d.
-
Сортировка выбором
При сортировке выбором выбирается элемент с наименьшим значением и делается его обмен с первым элементом массива. Затем находится элемент с наименьшим значением из оставшихся n-1 элементов и делается его обмен со вторым элементом и т.д. до обмена двух последних элементов. Например, если сортировку выбором применить для массива “bdac”, то будут получены следующие проходы:
-
исходное состояние: b d a c;
-
первый проход: a d b c;
-
второй проход: a b d c;
-
третий проход: a b c d.
Ниже приводится процедура выполняющая сортировку элементов массива выбором.
type
DataItem = char;
DataArray = array [1..80] of DataItem;
…
procedure Selekt(var item: DataArray; count:integer);
var
i, j, k: integer;
x: DataItem;
begin
for i := i to count-1 do
begin
k := i;
x := item[i];
for j := i+1 to count do { найти элемент с наименьшим значением }
if item[j]<x then
begin
k := j;
x := item[j];
end;
item[k] := item[i]; { обмен }
item[i] := x;
end;
end; { конец сортировки выбором }
-
Сортировка вставкой
Сортировка вставкой является последней из класса простых алгоритмов сортировки. При сортировке вставкой сначала упорядочиваются два элемента массива. Затем делается вставка третьего элемента в соответствующее место по отношению к первым двум элементам. Затем делается вставка четвертого элемента в список из трех элементов. Этот процесс повторяется до тех пор, пока все элементы не будут упорядочены. Например, для массива “dcab” сортировка вставкой будет проходить следующим образом:
-
исходное состояние: d c a b;
-
первый проход: c d a b;
-
второй проход: a c d b;
-
третий проход: a b c d.
Ниже приводится процедура выполняющая сортировку элементов массива вставкой.
{ сортировка вставкой }
type
DataItem = char;
DataArray = array [1..80] of DataItem;
…
procedure Inser(var item: DataArray; count:integer);
var
i, l: integer;
x: DataItem;
begin
for i := 2 to count do
begin
x := item[i];
j := i-1;
while (x<item[j]) and (j>0) do
begin
item[j+1] := item[j];
j := j-1;
end;
item[j+1] := x;
end;
end; { конец сортировки вставкой }
-
Заключение
Решение задачи на ЭВМ, сопровождающееся разработкой программного продукта, ориентировано на использование специализированного инструмента – интегрированной среды разработки приложений. Для того чтобы представить алгоритм решения в понятном для системы программирования виде, избежать синтаксических, семантических и логических ошибок при разработке программы необходим хороший уровень владения языком программирования.
Получение гарантированного качества программного продукта основано на комплексном решении ряда задач, к числу которых относятся: всестороннее изучение проблемы, построение адекватных математических моделей, выбор или разработка численных методов решения, разработка алгоритма и структуры данных, проектирование и кодирование программного продукта, тестирование и отладка.
Литература:
-
Васюкова Н.Д. Практикум по основам программирования: язык Паскаль. – М.: Наука, 1991. – 210 с.
-
Введение в язык Паскаль. / Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Учебное пособие. – М.: Наука, 1988. – 320 с.
-
Вирт Н. Алгоритмы + структуры данных = программы. – М.: Мир. 1985. – 245 с.
-
Джонстон Г. Учитесь программировать / Пер. с англ. – М.: Финансы и статистика, 1989. – 356 с.
Контрольные вопросы:
-
На чем основывается структурный метод программирования?
-
Приведите блок-схему алгоритма сортировки пузырьковым методом. Напишите соответствующий текст программы на языке Паскаль.
-
Приведите блок-схему алгоритма сортировки выбором. Напишите соответствующий текст программы на языке Паскаль.
-
Приведите блок-схему алгоритма сортировки вставкой. Напишите соответствующий текст программы на языке Паскаль.