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

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.