Сортировка представляет собой процесс упорядочения элементов в массиве в порядке возрастания или убывания их значений. Например, массив X из n элементов будет отсортирован в порядке возрастания значений его элементов, если
X[0] £ X[1] £… £ X[n-1],
и в порядке убывания, если
X[0] ³ X[1] ³… ³ X[n-1].
Сортировка пузырьковым методом является наиболее известной. Она основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов.
Пусть задан массив X из n целых чисел. Расположить элементы массива в порядке возрастания их значений.
Номер элемента
Исходный массив
Первый просмотр
Второй просмотр
Третий просмотр
Четвертый просмотр
Для преобразования массива, состоящего из n элементов, необходимо просмотреть его n–1 раз, каждый раз уменьшая диапазон просмотра на один элемент.
В ходе каждого просмотра сравнивают соседние элементы. Если следующий элемент меньше текущего, то их меняют местами.
Алгоритм сортировки
Для перестановки элементов в массиве по убыванию их значений необходимо при сравнении элементов массива заменить знак > на <.
Текст программы, сортирующей элементы в массиве по возрастанию методом «пузырька»:
Var i,n,j: integer; b:word;
X: array [1..100] of word;
begin
n:=StrToInt(Edit1.Text);
for i := 1 to n do
X[i]:=StrToFloat(InputBox
('Ввод массива','Введите
'+IntToStr(i)+'элемент','0,00'));
for j:=1 to n-1 do
for i:=1 to n-j do
if X[i] > X[i+1] then
begin
b:=X[i];
X[i]:=X[i+1];
X[i+1]:=b;
end;
S:='';
for i:=1 to n do
S:=S+FloatToStrF(X[i],
ffFixed,5,2)+' ';
Label2.Caption:=S;
ЗАДАЧА. Все наименьшие элементы массива Х(n) заменить средним арифметическим его значений.
procedure TForm1.btn1Click(Sender: TObject);
var
n,i:integer;
S,min:Real;
X:array [1..20] of real;
begin
n:=StrToInt(Edt1.Text);
for i:=1 to n do
X[i]:=StrToFloat(
Strngrd1.Cells[i,0]);
S:=0;
for i:=1 to n do
S:=S+X[i];
S:=S/n;
edt2.Text:=FloatToStr(S);
min:=X[1];
for i:=2 to n do
if X[i]<min then
min:=X[i];
edt3.Text:=FloatToStr(min);
for i:=1 to n do
if X[i]=min then
X[i]:=S;
for i:=1 to n do
strngrd2.Cells[i,0]:=
FloatToStr(X[i])
end;
ЗАДАЧА.Дан массив А состоящий из k целых положительных чисел. Записать все четные по значению элементы массива А в массив В.
Фрагмент программы:
procedure TForm1.Button1Click(Sender: TObject);
var k,i,m:integer;
A,B:array [1..10] of integer;
begin
k:=StrToInt(Edit1.Text);
for i:=1 to k do
A[i]:=StrToInt(
StringGrid1.Cells[i,0]);
m:=0;
for i:=1 to k do
begin
if A[i] mod 2 =0 then
begin
m:=m+1;
B[m]:=A[i];
end;
end;
if m<>0 then
for i:=1 to m do
StringGrid2.Cells[i,0]:=
IntToStr(B[i])
else
MessageDlg('В массиве
нет четных элементов',
MtInformation,[mbOk],0);
end;
ЗАДАЧА. Дан массив Х(N). Переписать 7 первых положительных элементов массива Х подряд в массив Y.