Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ОАиП(теория).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
151.01 Кб
Скачать

15 Сортировка простыми вставками.

На каждом шаге алгоритма, мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор пока набор входных данных не будет исчерпан. Выбор очередного элемента, выбираемого из исходного массива — произволен, может использоваться практически любой алгоритм выбора.

program Ins;

var

mass:array [1..100] of real;

i, j, n: integer;

x: real;

begin

read(n);

for i:=1 to n do

read(mass[i]);

for i := 2 to n do

begin

x := mass[i];

j := i-1;

while (j>0) and (x<mass[j]) do

begin

mass[j+1] := mass[j];

j := j-1;

end;

mass[j+1] := x;

end;

for i:=1 to n do

write(mass[i]:8:2);

end.

19.Чтение типизированных файлов

type

TStudent=record

name:string[255];

oz:integer;

end;

var

Student:TStudent;

File:File of TStudent;

begin

AssignFile(F,'test.dat');

Reset(F);

Read(F,Student);

CloseFile(F);

end;

18. Сортировка слиянием

Сортировка слиянием (англ. merge sort) — алгоритм сортировки, который упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Эта сортировка — хороший пример использования принципа «разделяй и властвуй». Сначала задача разбивается на несколько подзадач меньшего размера. Затем эти задачи решаются с помощью рекурсивного вызова или непосредственно, если их размер достаточно мал. Наконец, их решения комбинируются, и получается решение исходной задачи.

Для решения задачи сортировки эти три этапа выглядят так:

1) Сортируемый массив разбивается на две половины примерно одинакового размера;

2) Каждая из получившихся половин сортируется отдельно, например - тем же самым алгоритмом;

3) Два упорядоченных массива половинного размера соединяются в один.

Рекурсивное разбиение задачи на меньшие происходит до тех пор, пока размер массива не достигнет единицы (любой массив длины 1 можно считать упорядоченным).

Алгоритм был изобретён Джоном фон Нейманом в 1945 году.

procedure MergeSort( var ar1, ar2: array of Integer; min, max: Integer);

var

middle, int1, int2, int3: Integer;

begin

if min<max then begin

middle:=min div 2+max div 2;

MergeSort(ar1, ar2, min, middle);

MergeSort(ar1, ar2, middle+1, max);

int1:=min; //указатель на 1-й массив

int2:=middle+1; //указатель на 2-й массив

int3:=min; //указатель на объединённый массив

while (int1<=middle) and (int2<=max) do begin

if ar1[int1] then begin

ar2[int3]:=ar1[int1];

int1:=int1+1;

end

else begin

ar2[int3]:=ar1[int2];

int2:=int2+1;

end;

inc(int3);

end;

// очистка не пустого списка

while (int1<=middle) do begin

ar2[int3]:=ar1[int1];

int1:=int1+1;

int3:=int3+1;

end;

while (int2<=middle) do begin

ar2[int3]:=ar1[int2];

int2:=int2+1;

int3:=int3+1;

end;

end;

//приравнивание входящих массивов

for int1:=min to max do

ar1[int1]:=ar2[int1];

end;