- •Лекция №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.3. Сортировка выбором
Принцип метода:
Состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке.
Будем строить готовую последовательность, начиная с левого конца массива. Алгоритм состоит из n последовательных шагов, начиная от нулевого и заканчивая (n-1)-м.
На i-м шаге выбираем наименьший из элементов a[i] ... a[n] и меняем его местами с a[i]. Последовательность шагов при n=5 изображена на рисунке ниже.
В не зависимости от номера текущего шага i, последовательность a[0]...a[i] (выделена курсивом) является упорядоченной. Таким образом, на (n-1)-м шаге вся последовательность, кроме a[n] оказывается отсортированной, а a[n] стоит на последнем месте по праву: все меньшие элементы уже ушли влево.
Алгоритм сортировки методом выбора Текст программы
program Sort; {vubor}
uses
crt;
const
n = 20;
type
Mass = array [1..n] of Integer;
var
i, j,
temp : Integer;
a : Mass;
min, imin : Integer;
begin
clrscr;
randomize;
for i:=1 to n do
begin
A[i]:=random(1000);
write(a[i]:3, ' ');
end;
for i:=1 to n-1 do
begin
min := a[i];
imin := i;
for j:=i+1 to n do
if a[j]<min then
begin
min := a[j];
imin := j;
end;
a[imin] := a[i];
a[i] := min;
end;
writeln;
for i:=1 to n do
write(a[i]:3, ' ');
readln;
end.
2.1.4. Бинарный поиск
Алгоритм двоичного поиска допустимо использовать для нахождения заданного элемента только в упорядоченных массивах.
Принцип метода:
Исходный массив делится пополам и для сравнения выбирается средний элемент. Если он совпадает с искомым, то поиск заканчивается.
Если средний элемент меньше искомого, то все элементы левее его также будут меньше искомого. Следовательно, им можно исключить из зоны дальнейшего поиска, оставив только правую часть массива.
Аналогично, если средний элемент больше искомого, то отбрасывается правая часть, а остается левая.
На втором этапе выполняется аналогичные действия над оставшейся половиной массива. В результате после второго этапа остается ¼ часть массива.
И так далее, пока или элемент будет найден, или длина зоны поиска станет равной 0. В последнем случае искомый элемент найден не будет.
Алгоритм бинарного поиска т екст программы
program Bynar;
uses
crt;
const
n = 20;
type
Mass = array [1..n] of Integer;
var
i, j, k,
temp : Integer;
a : Mass;
x : integer;
L,R : Integer;
begin
clrscr;
randomize;
for i:=1 to n do
begin
A[i]:=random(1000);
write(a[i]:3, ' ');
end;
write('X = ');readln(x);
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, ' ');
L:=1; R :=n;
while (L<=R) do
begin
i := (L+R) div 2;
if a[i]=X then
break
else
if a[i]<X then L := i+1
else R := i-1;
end;
if a[i]=x then
write('Element is finded on pos',i:3)
else
write('Element is not finded');
readln;
end.