СОРТИРОВКА ВЫБОРОМ
Принцип метода:
Находим (выбираем) в массиве элемент с минимальным значением на интервале от 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. Заполнить строку из символов русского алфавита. Упорядочить слова, образующие строку, по возрастанию количества их символов.