Сортировка элементов массива
Дана матрица A(M,N). Отсортировать четные столбцы по убыванию, а нечетные по возрастанию.
Будем использовать простейший метод "пузырька". (Более быстрый метод, метод Шелла, описан в соответствующем примере.)
Сначала напишем процедуру, сортирующую столбец по возрастанию. Чтобы не возиться с индексами и не писать еще одни метод для сортировки по убыванию, каждый четный столбец умножим перед сортировкой на -1, а после сортировки умножим на -1 еще раз, вернув значения в исходное состояние. Для инициализации массива и для его печати создадим еще по одной процедуре. Обратите внимание, что массив передается в процедуры не как формальный, а как фактический параметр и все операции происходят с самим массивом, а не с его копией (см. здесь о формальных и фактических параметрах).
uses crt;
const
N = 20;
M = 30;
type
arr2 = array[1..M,1..N] of integer;
procedure createArr2(var a:arr2;ma,na:integer);
var i,j:integer;
begin
randomize;
for i:=1 to ma do
for j:=1 to na do
a[i,j]:=random(25);
end;
procedure printArr2(var a:arr2;ma,na:integer);
var i,j:integer;
begin
for i:=1 to ma do
begin
for j:=1 to na do
write(a[i,j]:3);
writeln;
end;
end;
procedure multArr2(var a:arr2;ma,col,r:integer);
var i,j:integer;
begin
for i:=1 to ma do
a[i,col]:=r*a[i,col];
end;
procedure sortArray(var a:arr2;ma,col:integer);
var i,j,t:integer;
begin
for i:=1 to ma do
for j:=1 to ma-i do
if (a[j,col]>a[j+1,col]) then
begin
t:=a[j,col];
a[j,col]:=a[j+1,col];
a[j+1,col]:=t;
end;
end;
var b:arr2;
n1,m1,k:integer;
begin
n1:=5;
m1:=6;
createArr2(b,m1,n1);
writeln('Initial Array:');
printArr2(b,m1,n1);
for k:=1 to m1 do
if ((k mod 2) = 0) then
multArr2(b,m1,k,-1);
for k:=1 to m1 do
sortArray(b,m1,k);
for k:=1 to m1 do
if ((k mod 2) = 0) then
multArr2(b,m1,k,-1);
writeln('Sorted Array:');
printArr2(b,m1,n1);
end.
|