СОРТИРОВКА ВЫБОРОМ

Принцип метода:

Находим (выбираем) в массиве элемент с минимальным значением на интервале от 1-го элемента до n-го (последнего) элемента и меняем его местами с первым элементом. На втором шаге находим элемент с минимальным значением на интервале от 2-го до n-го элемента и меняем его местами со вторым элементом.

И так далее для всех элементов до n-1-го.

Программа, реализующая метод выбора, будет иметь следующий вид:

Program SelectionSort;

uses Ctr;

const n= 20; {длина массива}

type TVector = array [1…n] of Real;

var

Vector: TVector;

Min: Real;

Imin, S: Integer;

i: Integer;

begin

ClrScr;

Writeln('Введите элементы массива:');

for i :=1 to n do

Read(Vector[i]);

Readln;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ }

for S :=1 to n-1 do

begin

{Поиск минимального элемента в диапазоне от S-го элемента до n-го}

Min:=Vector [S];

Imin:=S;

for i :=S+1 to n do

if Vector [i] < Min then

begin

Min := Vector [i];

Imin := i

end;

{Обмен местами минимального и S-го элементов}

Vector [Imin] := Vector [S];

Vector [S] := Min;

end;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _}

Writeln ('Отсортированный массив:');

for i :=1 to n do

Write (Vector [i]: 8: 2);

Writeln;

End.

СОРТИРОВКА ОБМЕНОМ (пузырьковая сортировка)

Принцип метода:

Слева направо поочередно сравнивается два соседних элемента, и если их взаиморасположение не соответствует заданному условию упорядоченности, то они меняются местами. Далее берутся два следующих соседних элемента и так далее до конца массива.

После одного такого прохода на последней n-ой позиции массива будет стоять максимальный элемент («всплыл» первый «пузырек»). Поскольку максимальный элемент уже стоит на своей последней позиции, то второй проход обменов выполняется до n-1-го элемента. И так далее. Всего требуется n-1 проход.

Программа, реализующая метод обмена («пузырька»), будет иметь следующий вид:

Program BubbleSort;

uses Ctr;

const

n= 20; { длина массива }

type

TVector = array [1…n] of Real;

var

Vector: TVector;

B: Real;

i, k: Integer;

begin

ClrScr;

Writeln('Введите элементы массива:');

for i :=1 to n do

Read (Vector[i]);

Readln;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ }

for k := n downto 2 do

{«Всплывание» очередного максимального элемента на k-ю позицию}

for i:= 1 to k-1 do

if Vector [i] > Vector [i+1] then

begin

B: =Vector[i];

Vector[i]:= Vector[i+1];

Vector[i+1]:= B

end;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _}

Writeln('Отсортированный массив:');

for i :=1 to n do

Write (Vector [i]: 8: 2);

Writeln;

End.

Задачи

1. Заполнить одномерный массив из n – элементов целых чисел. Упорядочить его:

а) по возрастанию;

б) по убыванию.

2. Заполнить одномерный массив из n – элементов целых чисел. Упорядочить первую половину элементов по возрастанию, вторую по убыванию.

3. Заполнить строку из латинских символов. Упорядочить символы строки по алфавиту, сначала заглавные, затем строчные. Символы, не являющиеся буквами исключить.

4. Заполнить строку из символов русского алфавита. Упорядочить символы по алфавиту, сначала заглавные, затем строчные символы. Символы, не являющиеся буквами исключить.

5. Заполнить строку из символов русского алфавита. Упорядочить слова, образующие строку, по алфавиту. Лишние пробелы и знаки препинания исключить.

6. Заполнить строку из символов русского алфавита. Упорядочить слова, образующие строку, по возрастанию количества их символов.