
- •Лекция №3. Строковый тип. Массивы
- •1. Строковый тип
- •2. Массивы
- •2.1. Сортировка массивов
- •2.1.1. Сортировка вставкой
- •Алгоритм метода сортировки вставкой т екст программы
- •2.1.2. Сортировка обменом («пузырьковая» сортировка)
- •Алгоритм сортировки методов пузырька Текст программы
- •2.1.3. Сортировка выбором
- •Алгоритм сортировки методом выбора Текст программы
- •2.1.4. Бинарный поиск
- •Алгоритм бинарного поиска т екст программы
- •Модуль system Процедура Val
- •Процедура Str
- •Модуль crt Цветовые константы
- •Переменная TextAttr
- •Функция KeyPressed
2.1.1. Сортировка вставкой
Принцип метода:
Массив разделяется на две части: отсортированную и неотсортированную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушать в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве неотсортированной части – все остальные элементы.
Таким образом, алгоритм будет состоять из n-1-го прохода (n – размерность массива), каждый из которых будет включать четыре действия:
-
взятие очередного i-го неотсортированного элемента и сохранение его в дополнительной переменной;
-
поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов;
-
сдвиг элементов массива от i-1 до j-1-го вправо, чтобы освободить найденную позицию вставки;
-
вставка взятого элемента в найденную j-ю позицию.
Пример:
Алгоритм метода сортировки вставкой т екст программы
program Sort; {vstavka}
uses
crt;
const
n = 20;
type
Mass = array [1..n] of Integer;
var
i, j, k,
temp : Integer;
a : Mass;
begin
clrscr;
randomize;
for i:=1 to n do
begin
A[i]:=random(1000);
write(a[i]:3, ' ');
end;
for i:=2 to n do
begin
temp := a[i];
j:=1;
while(temp>a[j]) do
j := j+1;
for k:=i-1 downto j do
a[k+1] := a[k];
a[j] := temp;
end;
writeln;
for i:=1 to n do
write(a[i]:3, ' ');
readln;
end.
2.1.2. Сортировка обменом («пузырьковая» сортировка)
Принцип метода:
Слева направо поочередно сравниваются два соседних элемента, и если их взаиморасположение не соответствует заданному условию упорядоченности, то они меняются местами. Далее берутся два следующих соседних элемента и так далее до конца массива.
После одного такого прохода на последней n-ой позиции массива будет стоять максимальный элемент («всплыл» первый «пузырек»). Поскольку максимальный элемент уже стоит на своей последней позиции, то второй проход обменов выполняется до n-1-го элемента. И так далее. Всего требуется n-1 проход.
Пример:
Расположим массив сверху вниз, от нулевого элемента - к последнему.
Шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.
После нулевого прохода по массиву «вверху» оказывается самый «легкий» элемент - отсюда аналогия с пузырьком. Следующий проход делается до второго сверху элемента, таким образом, второй по величине элемент поднимается на правильную позицию...
Делаем проходы по все уменьшающейся нижней части массива до тех пор, пока в ней не останется только один элемент. На этом сортировка заканчивается, так как последовательность упорядочена по возрастанию.
Алгоритм сортировки методов пузырька Текст программы
program Sort; {puzurek}
uses
crt;
const
n = 20;
type
Mass = array [1..n] of Integer;
var
i, j,
temp : Integer;
A : Mass;
begin
clrscr;
randomize;
for i:=1 to n do
begin
A[i]:=random(1000);
write(a[i]:3, ' ');
end;
for i:=n downto 2 do
for j:=1 to i-1 do
if a[j]>a[j+1] then
begin
temp := a[j];
a[j] := a[j+1];
a[j+1] := temp;
end;
writeln;
for i:=1 to n do
write(a[i]:3, ' ');
readln;
end.