Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 2).doc
Скачиваний:
96
Добавлен:
15.04.2015
Размер:
2.24 Mб
Скачать

5 4 3 1 2

5 4 3 2 1 Метод быстрой сортировки с разделением

Оба выше рассмотренных метода достаточно просты и наглядны, но не очень эффективны. Значительно быстрее работает алгоритм сортировки К. Хоора, кото­рый называют сортировкой с разделением или «быстрой сортировкой». В основу алгоритма положен метод последовательного дробления массива на части.

Исходный массив:

1 2 3 4 5 6 7 8 9

6 1 10 15 7 17 2 18 5

В начале определяется середина массива М и переменной X присваивается значение М[середина]. X := M[5]; X=7. После этого массив делится на две части:

1 2 3 4 5 6 7 8 9

6 1 10 15 7 17 2 18 5

X

Далее выполняется обмен элементами по следующему правилу:

при просмотре левой части массива слева направо выполняется поиск такого элемента массива, что М[I]<=Х, затем при просмотре правой части справа налево отыскивается такой элемент, что М[J]>=Х. Выполняется обмен местами данных элементов, пока все элементы слева от середины, удовлетворяющие условию М[I]>Х, не будут обменены с элементами, расположенными справа от середины и удовлетворяющими условию М[J]<Х. В результате этого получим массив из двух частей. Далее каждая часть также сортируется. Т.е. происходит рекурсивный вызов функции сортировки.

Program Quck_Sort;

uses Crt;

const Count=9;

M: array[1..Count] of byte =(6,1,10,15,7,17,2,18,5);

var

I : integer;

procedure Q(First, Last : integer);

var I, J, X, W, L, k : integer;

begin

i:=first; j:=last;

k:= (first+last) div 2;

x:=m[k]; {Определение серединного элемента}

repeat

while m[i] > x do i:= i+1; { Определение i–го элемента, удовлетворяющего условию М[I]<=Х }

while x > m[j] do j:= j-1; { Определение j–го элемента, удовлетворяющего условию М[J]>=Х }

if i<=j

then {Обмен элементами}

begin

w:=m[i];

m[i]:=m[j]; m[j]:=w;

i:=i+1; j:=j-1;

end;

until i>j;

if first<j then Q(first,j);

if i<last then Q(i,last);

end;

BEGIN

clrscr; writeln('Исходный массив:');

for i:=1 to count do write(' ',m[i]); writeln;

Q(1,count); writeln('Результирующий массив:');

for i:=1 to count do write(' ',m[i]); writeln;

END.

  1. Множества

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

С множествами вы сталкивались при изучении математики.

Объявление множеств

Тип-множество или переменную-множество вы можете объявить так же, к объявляются прочие структурированные типы и принадлежащие им переменные. Сначала объявляется тип-множество, а затем переменная этого типа.

Синтаксическая диаграмма:

СИНТАКСИС:

type

тип-множество = set of базовый тип;

Пример: LetterSet = set of 'A'..'Z';

Интерпретация: Идентификатор типножество определен на основе значений базового типа. Значение переменной, объявленной как принадлежащей типу-множеству, представляет собой набор значений базового типа. При этом базовый тип должен быть порядковым типом: byte, char, boolean, тип-диапазон и перечисление.

Примечание: Большинство реализаций Pascal ограничивают число значений базового типа, на основе которого можно объявлять множества. Turbo Pascal ограничивает это число количеством значений типа данных Char (256), позволяя объявить множественный тип set of Char. Из-за этого ограничения вы не сможете использовать тип Integer в качестве базового типа, однако ничто не мешает использовать диапазон значений типа Integer с 256 значениями.

Объявить тип множество можно и в разделе описания переменных:

var

S : set of 1..3;

S - переменная типа множества (или множественная переменная).

Пустое множество содержит нуль элементов и обозначается парой пустых квадратных скобок: [].

Универсальное множество содержит все значения своего базового типа: [1, 2, 3].

Объявление переменной множественного типа не вызывает автоматического присваивания ей значения. Под нее только выделяется память.

Для работы с множеством вам необходимо определить значение этого множества. Это можно сделать с помощью оператора присваивания.

Таким образом множество представляет собой перечень элементов, заключенных в квадратные скобки: [перечень элементов]. Эта конструкция также называется конструктором множеств. Элементы множества должны относиться к одному порядковому типу или к совместимым порядковым типам. Элементы в перечне отделяются один от другого запятыми. Непрерывная последовательность элементов в перечне может быть представлена в виде диапазона (например, min_значение .. mах_значение, где min_значение и mах_значение — это совместимые по типу выражения, причем min_значение должно быть меньше или равно mах_значение).

Примечание: В Turbo Pascal должны соблюдаться следующие условия: Ord(min_значение)  0 и Ord(max_значение) ≤ 256.

Соседние файлы в папке WORD