Предмет: Информатика,
автор: Аноним
Решите задачи в Паскале, пожалуйста.
1)Дан массив, отсортировать все его элементы до максимального по возрастанию.
2)Дан массив, отсортировать все его элементы от минимального по возрастанию.
3)Дан массив, отсортировать все его элементы от максимального до минимального по убыванию.
МЕТОДОМ ПУЗЫРЬКА
Ответы
Автор ответа:
0
1.
const n=20;
var
a:array[1..n] of integer;
max,imax,i,j,t:integer;
begin
Randomize;
Writeln('Исходный массив:');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ')
end;
Writeln;
max:=a[1]; imax:=1;
for i:=2 to n do
if a[i]>max then begin max:=a[i]; imax:=i; end;
writeln('max = ',max);
for i:=1 to imax-1 do
for j:=1 to imax-i do
if a[j]>a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;
Writeln('Отсортированный массив:');
for i:=1 to n do Write(a[i],' ');
Writeln;
end.
Пример:
Исходный массив:
-5 -17 -19 4 -10 16 21 -23 22 24 -5 19 11 -24 6 -25 13 3 9 0
max = 24
Отсортированный массив:
-23 -19 -17 -10 -5 4 16 21 22 24 -5 19 11 -24 6 -25 13 3 9 0
2.
const n=20;
var
a:array[1..n] of integer;
min,imin,i,j,t:integer;
begin
Randomize;
Writeln('Исходный массив:');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ');
end;
Writeln;
min:=a[1]; imin:=1;
for i:=2 to n do
if a[i]<min then begin min:=a[i]; imin:=i; end;
writeln('min = ',min);
for i:=1 to n-imin-1 do
for j:=imin to n-i do
if a[j]>a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;
Writeln('Отсортированный массив:');
for i:=1 to n do Write(a[i],' ');
Writeln;
end.
Пример:
Исходный массив:
3 -24 -16 -9 -25 3 -25 17 -22 -3 8 2 -7 -8 -8 -24 -23 12 24 -24
min = -25
Отсортированный массив:
3 -24 -16 -9 -25 -25 -24 -24 -23 -22 -8 -8 -7 -3 2 3 8 12 17 24
3.
const n=20;
var
a:array[1..n] of integer;
max,imax,min,imin,i,j,t:integer;
begin
Randomize;
Writeln('Исходный массив:');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ')
end;
Writeln;
max:=a[1]; imax:=1;
min:=a[1]; imin:=1;
for i:=2 to n do
begin
if a[i]>max then begin max:=a[i]; imax:=i; end;
if a[i]<min then begin min:=a[i]; imin:=i; end;
end;
writeln('max = ',max,' min = ',min);
if imax>imin then begin
for i:=1 to imax-imin-1 do
for j:=imin to imax-i do
if a[j]>a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end
end else begin
for i:=1 to imin-imax-1 do
for j:=imax to imin-i do
if a[j]<a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end; end;
Writeln('Отсортированный массив:');
for i:=1 to n do Write(a[i],' ');
Writeln;
end.
Пример:
Исходный массив:
-12 13 1 -17 -13 -10 23 5 8 -11 -9 -2 17 19 10 -5 14 10 -20 -9
max = 23 min = -20
Отсортированный массив:
-12 13 1 -17 -13 -10 23 19 17 14 10 10 8 5 -2 -5 -9 -11 -20 -9
const n=20;
var
a:array[1..n] of integer;
max,imax,i,j,t:integer;
begin
Randomize;
Writeln('Исходный массив:');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ')
end;
Writeln;
max:=a[1]; imax:=1;
for i:=2 to n do
if a[i]>max then begin max:=a[i]; imax:=i; end;
writeln('max = ',max);
for i:=1 to imax-1 do
for j:=1 to imax-i do
if a[j]>a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;
Writeln('Отсортированный массив:');
for i:=1 to n do Write(a[i],' ');
Writeln;
end.
Пример:
Исходный массив:
-5 -17 -19 4 -10 16 21 -23 22 24 -5 19 11 -24 6 -25 13 3 9 0
max = 24
Отсортированный массив:
-23 -19 -17 -10 -5 4 16 21 22 24 -5 19 11 -24 6 -25 13 3 9 0
2.
const n=20;
var
a:array[1..n] of integer;
min,imin,i,j,t:integer;
begin
Randomize;
Writeln('Исходный массив:');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ');
end;
Writeln;
min:=a[1]; imin:=1;
for i:=2 to n do
if a[i]<min then begin min:=a[i]; imin:=i; end;
writeln('min = ',min);
for i:=1 to n-imin-1 do
for j:=imin to n-i do
if a[j]>a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;
Writeln('Отсортированный массив:');
for i:=1 to n do Write(a[i],' ');
Writeln;
end.
Пример:
Исходный массив:
3 -24 -16 -9 -25 3 -25 17 -22 -3 8 2 -7 -8 -8 -24 -23 12 24 -24
min = -25
Отсортированный массив:
3 -24 -16 -9 -25 -25 -24 -24 -23 -22 -8 -8 -7 -3 2 3 8 12 17 24
3.
const n=20;
var
a:array[1..n] of integer;
max,imax,min,imin,i,j,t:integer;
begin
Randomize;
Writeln('Исходный массив:');
for i:=1 to n do begin
a[i]:=Random(51)-25;
Write(a[i],' ')
end;
Writeln;
max:=a[1]; imax:=1;
min:=a[1]; imin:=1;
for i:=2 to n do
begin
if a[i]>max then begin max:=a[i]; imax:=i; end;
if a[i]<min then begin min:=a[i]; imin:=i; end;
end;
writeln('max = ',max,' min = ',min);
if imax>imin then begin
for i:=1 to imax-imin-1 do
for j:=imin to imax-i do
if a[j]>a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end
end else begin
for i:=1 to imin-imax-1 do
for j:=imax to imin-i do
if a[j]<a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end; end;
Writeln('Отсортированный массив:');
for i:=1 to n do Write(a[i],' ');
Writeln;
end.
Пример:
Исходный массив:
-12 13 1 -17 -13 -10 23 5 8 -11 -9 -2 17 19 10 -5 14 10 -20 -9
max = 23 min = -20
Отсортированный массив:
-12 13 1 -17 -13 -10 23 19 17 14 10 10 8 5 -2 -5 -9 -11 -20 -9
Автор ответа:
0
PascalABC.NET 3.3.5, сборка 1650 от 01.04.2018
Внимание! Если программа не работает, обновите версию!
procedure BubbleSort(a:array of integer;
descending:Boolean:=False; // нужна ли сортировка по невозрастанию
u:integer:=-1; // начальный индекс
v:integer:=-1); // конечный индекс
// Простая пузырьковая сортировка элементов с индексами с u по v
begin
// обеспечим корректность параметров u и v
if u<0 then u:=0;
var n:=a.Length;
if (v<0) or (v>=n) then v:=n-1;
if u>v then Swap(u,v)
else if u=v then Exit;
// собственно, сортировка
if descending then begin // по невозрастанию
for var i:=v-1 downto u do
for var j:=u to i do
if a[j]<a[j+1] then Swap(a[j],a[j+1])
end
else begin
for var i:=v-1 downto u do // по неубыванию
for var j:=u to i do
if a[j]>a[j+1] then Swap(a[j],a[j+1])
end
end;
begin
Write(': ');
var a:=ArrRandom;
a.Println;
var (imin,imax):=(a.IndexMin,a.IndexMax);
var b:=Copy(a);
Write('1: '); BubbleSort(b,False,0,imax); b.Println;
b:=Copy(a);
Write('2: '); BubbleSort(b,False,imin); b.Println;
b:=Copy(a);
Write('3: '); BubbleSort(b,True,imax,imin); b.Println
end.
Пример
: 70 61 10 72 17 84 19 35 83 47
1: 10 17 61 70 72 84 19 35 83 47
2: 70 61 10 17 19 35 47 72 83 84
3: 70 61 84 72 17 10 19 35 83 47
Внимание! Если программа не работает, обновите версию!
procedure BubbleSort(a:array of integer;
descending:Boolean:=False; // нужна ли сортировка по невозрастанию
u:integer:=-1; // начальный индекс
v:integer:=-1); // конечный индекс
// Простая пузырьковая сортировка элементов с индексами с u по v
begin
// обеспечим корректность параметров u и v
if u<0 then u:=0;
var n:=a.Length;
if (v<0) or (v>=n) then v:=n-1;
if u>v then Swap(u,v)
else if u=v then Exit;
// собственно, сортировка
if descending then begin // по невозрастанию
for var i:=v-1 downto u do
for var j:=u to i do
if a[j]<a[j+1] then Swap(a[j],a[j+1])
end
else begin
for var i:=v-1 downto u do // по неубыванию
for var j:=u to i do
if a[j]>a[j+1] then Swap(a[j],a[j+1])
end
end;
begin
Write(': ');
var a:=ArrRandom;
a.Println;
var (imin,imax):=(a.IndexMin,a.IndexMax);
var b:=Copy(a);
Write('1: '); BubbleSort(b,False,0,imax); b.Println;
b:=Copy(a);
Write('2: '); BubbleSort(b,False,imin); b.Println;
b:=Copy(a);
Write('3: '); BubbleSort(b,True,imax,imin); b.Println
end.
Пример
: 70 61 10 72 17 84 19 35 83 47
1: 10 17 61 70 72 84 19 35 83 47
2: 70 61 10 17 19 35 47 72 83 84
3: 70 61 84 72 17 10 19 35 83 47
Похожие вопросы
Предмет: Английский язык,
автор: oksanalitvin4uk1978
Предмет: Английский язык,
автор: Аноним
Предмет: Математика,
автор: parpulovarumana
Предмет: Геометрия,
автор: ilimdar11
Предмет: Математика,
автор: 12518