Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Михайлов.doc
Скачиваний:
4
Добавлен:
05.03.2016
Размер:
197.12 Кб
Скачать

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

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

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

Program SelectionSort;

uses Crt;

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

type

TVector=array[1..n]of Real;

TStudentCard = record

SurName : String20; {Фамилия}

Name : String20; {Имя}

FatherName : String20; {Отчество}

Year : Integer; {Год рождения}

HomeAddress: String; {Домашний адрес}

GroupCode : String7; {Шифр группы}

Marks : Tmarks; {Оценки за последний семестр}

end;

Tgroup = array[1..20] of TStudentCard;

var

Vector :TVector;

Min :Real;

Imin,S,i :Integer;

GroupRPZ_10_02,

GroupRPZ_09_01 : Tgroup;

begin

ClrScr;

GroupRPZ_10_02[1].SurName := 'Vakulanko';

GroupRPZ_10_02[1].Marks.Prog := 3;

GroupRPZ_10_02[1].Marks.Philosofy := 5;

GroupRPZ_10_02[1].SurName := 'Danchenko';

GroupRPZ_10_02[1].Marks.Prog := 3;

GroupRPZ_10_02[1].Marks.Philosofy := 3;

GroupRPZ_10_02[1].SurName := 'Kuznesov';

GroupRPZ_10_02[1].Marks.Prog := 3;

GroupRPZ_10_02[1].Marks.Philosofy := 4;

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.

ВАРИАНТ №13

Сортировка обменом («Пузырьковая сортировка»)

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

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

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

Program BubbleSort;

uses Crt;

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

type

TVector=array[1..n] of Real;

TStudentCard = record

SurName : String20; {Фамилия}

Name : String20; {Имя}

FatherName : String20; {Отчество}

Year : Integer; {Год рождения}

HomeAddress: String; {Домашний адрес}

GroupCode : String7; {Шифр группы}

Marks : Tmarks; {Оценки за последний семестр}

end;

Tgroup = array[1..20] of TStudentCard;

var

Vector:TVector;

B :Real;

i,k :Integer;

GroupRPZ_10_02,

GroupRPZ_09_01 : Tgroup;

begin

ClrScr;

GroupRPZ_10_02[1].SurName := 'Vakulanko';

GroupRPZ_10_02[1].Marks.Prog := 3;

GroupRPZ_10_02[1].Marks.Philosofy := 5;

GroupRPZ_10_02[1].SurName := 'Danchenko';

GroupRPZ_10_02[1].Marks.Prog := 3;

GroupRPZ_10_02[1].Marks.Philosofy := 3;

GroupRPZ_10_02[1].SurName := 'Kuznesov';

GroupRPZ_10_02[1].Marks.Prog := 3;

GroupRPZ_10_02[1].Marks.Philosofy := 4;

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

for i:=1 tj n do Read(Vector[i]); Readln;

{---------------------------------------------}

for k:=n downto 2 do

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

for i:=1 tj k-1 do

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

begin

B:=Vector[i];

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

Vector[i+1]:=И

end;

{--------------------------------------------}

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

for i:=1 tj n do Write(Vector[i]:8:2);

Writeln;

end.

ВАРИАНТ №14