![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Отсортировать элементы двумерного массива по элементам второй строки.
Исходный массив. Результат
1 2 3 4 5 5 2 4 3 1
9 3 7 3 1 1 3 3 7 9
6 7 8 9 1 1 7 9 8 6
От сортировки одномерного массива этот случай отличается только тем, что переставлять нужно не два сравниваемых элемента, а два столбца:
for i: = 1 to n – 1 do
for j: = i+1 to n do
if a [2, i] > a [2, j]
then for k: = 1 to n do
begin r: = a [k, i]; a [k, i]; = a[k, j]; a [k, j]: =r
end.
{Сортировка массивов}
{ 1. Вставками }
{ 2. Обменом }
{ 3. Выбором }
{ 4. Фон Неймана (Слияние двух отсортированных массивов)}
program sor1;
uses crt;
const n=4;
var mas:array[1..n,1..n]of integer;
buf,l,i,j,a,c,nextmas:integer;
quit:boolean;
procedure print;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(' ',mas[i,j],' ');
writeln;
end;
writeln;writeln('Ќ ¦ЁвҐ Enter ¤«п Їа®¤®«¦ҐЁп!');
readln;
end;
procedure next;
begin
j:=j+1;
if j=n+1 then begin j:=1;i:=i+1;end;
end;
procedure last;
begin
j:=j-1;
if j=0 then begin j:=n;i:=i-1;end;
end;
begin
clrscr;
for i:=1 to n do
for j:=1 to n do
mas[i,j]:=round(random*(9));
print;
i:=1;j:=1;
for l:=2 to (n*n) do
begin
next;buf:=mas[i,j];a:=i;c:=j;
last;quit:=true;
while (buf<mas[i,j])and(quit) do
begin
nextmas:=mas[i,j];
mas[i,j]:=buf;
next;mas[i,j]:=nextmas;last;last;
if j=0 then quit:=false;
end;
i:=a;j:=c;
end;
print;
end.
Результаты работы:
0 0 8 2 2 6 3 1 3 4 1 4 1 8 1 3 Нажмите Enter для продолжения! 0 0 1 1 1 1 2 2 3 3 3 4 4 6 8 8 Нажмите Enter для продолжения! |
program sor2;
uses crt;
const n=4;
var mas:array[1..n,1..n]of integer;
buf,l,units,i,j,nextmas:integer;
quit:boolean;
procedure print;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(' ',mas[i,j],' ');
writeln;
end;
writeln;writeln('Ќ ¦ЁвҐ Enter ¤«п Їа®¤®«¦ҐЁп!');
readln;
end;
procedure next;
begin
j:=j+1;
if j=n+1 then begin j:=1;i:=i+1;end;
end;
procedure last;
begin
j:=j-1;
if j=0 then begin j:=n;i:=i-1;end;
end;
begin
clrscr;
units:=n*n;
for i:=1 to n do
for j:=1 to n do
mas[i,j]:=round(random*9);
print;
repeat
i:=1;j:=1;
quit:=true;
units:=units-1;
for l:=1 to units do
begin
next;nextmas:=mas[i,j];last;
if mas[i,j]>nextmas
then begin buf:=mas[i,j];mas[i,j]:=nextmas;next;mas[i,j]:=buf;quit:=false;end
else next;
end;
until quit or (units=1);
print;
end.
Результаты работы:
0 0 8 2 2 6 3 1 3 4 1 4 1 8 1 3 Нажмите Enter для продолжения! 0 0 1 1 1 1 2 2 3 3 3 4 4 6 8 8 Нажмите Enter для продолжения! |
program sor3;
uses crt;
const n=4;
var mas:array[1..n,1..n]of integer;
min,buf,l,l1,i,j,i1,j1,a,c:integer;
procedure print;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(' ',mas[i,j],' ');
writeln;
end;
writeln;writeln('Ќ ¦ЁвҐ Enter ¤«п Їа®¤®«¦ҐЁп!');
readln;
end;
begin
clrscr;
for i:=1 to n do
for j:=1 to n do
mas[i,j]:=round(random*9);
print;
a:=1;c:=1;i:=1;j:=1;
for l:=1 to (n*n) do
begin
min:=mas[a,c];i:=a;j:=c;i1:=a;j1:=c;
for l1:=1 to (n*n+1)-l do
begin
if min>mas[i1,j1] then begin min:=mas[i1,j1];i:=i1;j:=j1;end;
j1:=j1+1;if j1=(n+1) then begin j1:=1;i1:=i1+1;end;
end;
buf:=mas[i,j];
mas[i,j]:=mas[a,c];
mas[a,c]:=buf;
c:=c+1;if c=(n+1) then begin c:=1;a:=a+1;end;
end;
print;
end.
Результаты работы:
0 0 8 2 2 6 3 1 3 4 1 4 1 8 1 3 Нажмите Enter для продолжения! 0 0 1 1 1 1 2 2 3 3 3 4 4 6 8 8 Нажмите Enter для продолжения! |
program sor4;
uses crt;
const n=4;
type mas=array[1..n,1..n]of integer;
var mas1,mas2:mas;
mas3:array[1..2*n,1..n]of integer;
buf,i,j,i1,j1,a,c:integer;
procedure next(t:integer);
begin
if t=1 then begin
j:=j+1;if j=n+1 then begin j:=1;i:=i+1;end;
end;
if t=2 then begin
j1:=j1+1;if j1=n+1 then begin j1:=1;i1:=i1+1;end;
end;
if t=3 then begin
c:=c+1;if c=n+1 then begin c:=1;a:=a+1;end;
end;
end;
procedure print(pr:mas);
begin
for a:=1 to n do
begin
for c:=1 to n do
write(' ',pr[a,c],' ');
writeln;
end;
writeln;writeln('Ќ ¦ЁвҐ Enter ¤«п Їа®¤®«¦ҐЁп!');
readln;
end;
begin
clrscr;
buf:=10;
for a:=1 to n do
for c:=1 to n do
begin
mas1[a,c]:=buf;
buf:=buf+1;
mas2[a,c]:=buf;
buf:=buf+1;
end;
print(mas1);print(mas2);
a:=1;c:=1;i:=1;j:=1;i1:=1;j1:=1;
while (i<>n+1)and(i1<>n+1) do
begin
if mas1[i,j]<mas2[i1,j1] then begin mas3[a,c]:=mas1[i,j];next(1);end
else begin mas3[a,c]:=mas2[i1,j1];next(2);end;
next(3);
end;
if i=n+1 then while not(i1=n+1)do
begin
mas3[a,c]:=mas2[i1,j1];
next(3);next(2);
end;
if i1=n+1 then while not(i=n+1)do
begin
mas3[a,c]:=mas2[i,j];
next(3);next(1);
end;
for a:=1 to n*2 do
begin
for c:=1 to n do
write(' ',mas3[a,c],' ');
writeln;
end;
writeln;writeln('Ќ ¦ЁвҐ Enter ¤«п Їа®¤®«¦ҐЁп!');
readln;
end.
Результаты работы:
10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 Нажмите Enter для продолжения! 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 Нажмите Enter для продолжения! 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Нажмите Enter для продолжения! |
Дата публикования: 2015-02-22; Прочитано: 706 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!