Написать программу, которая чётные столбцы матрицы сортирует простым методом сортировки,а нечетные — быстрым — Pascal(Паскаль)

uses
  crt;
 
var
  a: array[1..200, 1..200] of integer;
  i, j, m, n, z, x, incr, l, k, tmp, t, p: integer;
 
begin
  textbackground(blue);
  clrscr;
  textcolor(yellow);
  randomize;
  repeat  {ogranichenie na vvod}
    writeln('vvedite chislo strok');
    readln(m);
  until (m >= 1) and (m <= 200);
  repeat  {ogranichenie na vvod}
    writeln('vvedite chislo stolbtsov');
    readln(n);
  until (n > 1) and (n <= 200);
  {zapolnenie matrix}
  for i := 1 to m do 
  begin
    for j := 1 to n do
      a[i, j] := random(101) + 11;
  end;
  textcolor(red);
  writeln('ishodnaia matritsa');
  textcolor(white);
  for i := 1 to m do 
  begin
    for j := 1 to n do
      write(a[i, j], ' ');
    writeln;
  end;
  {sortirovka matrix}
  for i := 1 to m do 
  begin
    for j := 1 to n do
      {proverka na chetnost}
      if j mod 2 <> 0 then 
      begin
        {metod pusirka}
        for k := 1 to m - 1 do 
        begin
          for l := m - 1 downto k do
            if a[l, j] > a[l + 1, j] then 
            begin
              inc(x);      {perestanovki}
              tmp := a[l, j];
              a[l, j] := a[l + 1, j];
              a[l + 1, j] := tmp;
            end;
          inc(t);   {prohodi}
        end;  {konets pusirka}
      end
      else
      if j mod 2 = 0 then
      begin
        {sortirovka shella}
        incr := m div 2;
        while incr > 0 do 
        begin
          for k := incr + 1 to m do 
          begin
            l := k - incr;
            while l > 0 do
              if a[l, j] > a[l + 1, j] then 
              begin
                inc(z);       {perestanovki}
                tmp := a[l, j];
                a[l, j] := a[l + 1, j];
                a[l + 1, j] := tmp;
                l := l - incr
              end
              else
                l := 0
          end;
          incr := incr div 2;
          inc(p); {prohodi}
        end;  {tsikl sortirivki zaconchilsa}
      end;  
  end;  {konets vsego tsikla}
  textcolor(red);
  writeln('novi matrix');
  textcolor(white);
  for i := 1 to m do 
  begin
    for j := 1 to n do
      write(a[i, j], ' ');
    writeln;
  end;
  textcolor(yellow);
  writeln('ostalnoe-----------------------------------');
  writeln('prohodi shella =', ' ', p);
  writeln('prohodi puzirk =', ' ', t);
  writeln('perestanovki shella =', ' ', z);
  writeln('perestanovki pusirka =', ' ', x);
  readln;
end.

Leave a Comment

9 + 1 =