Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_1_1 / LecRus / MainPart.doc
Скачиваний:
117
Добавлен:
03.03.2016
Размер:
5.03 Mб
Скачать

«Школьный» алгоритм сортировки

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

;

во втором случае - соотношение

.

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

На начальном этапе изучения программирования, в частности в школьном курсе информатики программу сортировки одномерного массива обычно представляют в следующем виде:

For i:=1 to n do

For j:=1 to n do

If x[i]>x[j] then

Begin

R:=x[i]; x[i]:=x[j];

x[j]:=R

End;

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

Недостатки школьного алгоритма сортировки:

1. Дважды проверяется каждая пара элементов (например, при ипроверяются элементыи; прии─ те же элементыи).

2. При производится ненужная проверка одного и того же элемента.

3. Алгоритм совершенно не учитывает исходное расположение элементов массива. Это означает, что время обработки массива, элементы которого уже были расположены по возрастанию, будет примерно таким же, как и в случае, когда элементы массива расположены в обратном порядке, т.е. по убыванию.

Избавиться от первых двух недостатков довольно легко. Для этого алгоритм сортировки запишем в следующем виде:

For i:=1 to n-1 do

For j:=i+1 to n do

If x[i]>x[j] then

Begin

R:=x[i]; x[i]:=x[j];

x[j]:=R

End;

Назовем этот вариант модифицированным школьным алгоритмом сортировки.

Как будет в дальнейшем показано в сравнительной таблице методов группировки, в данном случае время обработки массива сокращается примерно в два раза.

Группировка массива методом прямой выборки

В рассмотренном ниже алгоритме последовательно выбирается минимальный элемент в подмассивах ; в связи с этим данный метод группировки можно назвать также методом выделения минимального элемента.

Последовательность реализации алгоритма:

1) Просматриваем массив и определяем индекс минимального элемента. Если , то выполняем обмен элементов и .

2) Просматриваем подмассив и определяем индекс минимального элемента. Если , то выполняем обмен элементов и .

3) То же по отношению к подмассиву и т.д.

Последним подмассивом, подвергающимся просмотру, является подмассив .

Program MinElem;

Const Nmax = 500;

Type Ar = array[1..Nmax] of real;

Var i,j,n,k : word;

Xmin : real;

X : Ar;

Begin

Ввод и печать n, X

For i:=1 to n-1 do

Begin

Xmin:=x[i]; k:=i;

For j:=i+1 to n do { определение индекса k }

If x[j]<Xmin then { мин.элемента в подмассиве }

Begin { xi, xi+1, ..., xn }

Xmin:=x[j]; k:=j

End;

If k>i then { обмен элементов }

Begin { xn и xk }

x[k]:=x[i]; x[i]:=Xmin

End;

End;

Печать массива Х

End.

Здесь внешний цикл - перебор подмассивов; внутренний - поиск минимального элемента в подмассиве. Количество выполнений внешнего и внутреннего циклов не зависит от исходной упорядоченности массива .

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

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