Сортировка массивов


End.

Begin

Begin

Var

Type

End.

Begin

Var

End.

Begin

Begin

Var

Type

Var

Type

Var

Type

Многомерные массивы

End.

Begin

Var

Type

Const

n=4;

vector=array[1..n] of real;

u, v:vector;

s, d:real; {S – скалярное произведение, d - длина}

i:integer;

s:=0; d:=0;

for i:=1 to n do begin

read(u[i],v[i]);

S:=S + u[i]*v[i];

d:=d + v[i]*v[i];

end;

d:=sqrt(d);

writeln(S, ‘ ‘,d);


 

ЛЕКЦИЯ №11

Схема описания многомерного массива

array [<тип индекса>] of array [тип индекса] of < тип элемента >

Тип элемента может быть любым кроме файлового.

Примеры описания двумерных массивов:

stroka = array [1..5] of integer;

matrix = array [1..3] of stroka;

a:matrix;

matrix = array [1..5] of array [1..3] of integer;

a:matrix;

matrix = array [1..3,1..5] of integer;

Доступ к элементам массива:

a[1][1] := 1;

a[1,1] := 1;

Многомерный массив:

var x: array [1..3, 5..10, 2..4] of real

x[1,5,2]:=1;

Элементы матрицы хранятся по строками

a11..a15 a21..a25 a31..a35
1-я строка 2-я строка 3-я строка

Такой способ даёт возможность индексировать целые строки.

Примеры программ:

1. Перестановка столбцов матрицы

program ColChange;

const n=3;

a: array [1..n,1..n] of real;

i, j, col1, col2: integer;

temp: real;

{ввод матрицы}

writeln(‘Введите номера столбцов для перестановки’);

readln(col1, col2);

for i := 1 to n do

temp := a[i,col1];

a[i,col1] := a[i,col2];

a[i,col2] := temp;

end;

{вывод матрицы}

2. Удаление строки матрицы

program ColDelete;

const n = 3, m = 4;

a:array [1..n, 1..m] of real;

I, j ,k, newn : integer;

{вводматрицы}

readln(k); {строка которую надо удалить}

for i := k to n -1 do

for j :=1 to m do a[i, j] := a[i + 1, j];

newn := n-1; {новое количество строк}

{вывод матрицы до строки newn}

Так как объем памяти, выделяемый под массив остается неизменным, последняя строка дублируется.

3. Умножение матриц. (три вложенных цикла)

program MultMatrix;

const p=10 {максимальный размер обрабатываемых матриц}

matrix = array [1..p, 1..p] of real;

a, b, c: matrix;

i, j, k, n, m, l: integer;

{вводматрицы}

For i := 1 to n do

for j := 1 to m do

c[i, j] := 0;

for k :=1 to l do c[i, j] := c[i, j] + a[i, k]*b[k, j];

… {вывод матрицы}

4. Ввод размеров и элементов матриц.

writeln(‘Введите количество строк матрицы А, n <=’, p);

readln(n);

writeln(‘Введите количество строк < = ’, p);

readln(L);

writeln(‘Введите ‘, n * L, ‘ элементов матрицы А’);

for i := 1 to n do

for j := 1 to L do read(a[i ,j]);

{Аналогично для матрицы В, количество строк = L}

for i := 1 to L do

for j := 1 to n do read(b[i ,j]);

Сортировка – процесс перегруппировки заданного множества объектов в соответствии с определенными критериями (например, по возрастанию).

Цель сортировки – облегчить поиск элементов в отсортированном массиве

Методы:

ü Внутренний (не предусматривает использования дополнительных массивов, хранится в ОП)

ü Внешний (применяется к большим массивам, расположенным на внешних носителях)

Элементарные методы сортировки

ü Сортировка вставкой

ü Сортировка выбором

ü Сортировка обменом (пузырьковая)

Усовершенствованные методы сортировки

ü Быстрая сортировка (метод Хоара)

ü Сортировка методом Шелла

ü С помощью дерева или пирамидальный

ü Методом слияния.

Требования к алгоритму сортировки

ü Устойчивость (относительное расположение элементов с равными значениями не меняется)

ü Экономное использование памяти

ü Эффективность (время работы)

Мерой эффективности языка являются:

· С – число операций сравнения

· M – число операций обмена

Хорошие алгоритмы сортировки требуют операций сравнения.