Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сортировка элементов массива методом выбора на...doc
Скачиваний:
3
Добавлен:
23.09.2019
Размер:
228.86 Кб
Скачать

Сортировка элементов массива методом выбора на языке программирования Pascal.

 

program sort_vibor;

uses crt;

const n=10;

x:array [1..n] of integer=(25,11,-8,0,99,25,0,19,14,-17);

var

i,j,nmin:byte;

min:integer;

begin clrscr;

writeln('ich massiv:');

for i:=1 to n do write (x[i]:6);

writeln;

for j:=1 to n-1 do

begin

min:=x[j];

nmin:=j;

for i:=j+1 to n do

if x[i]<min

then begin

min:=x[i];

nmin:=i;

end;

x[nmin]:=x[j];

x[j]:=min;

end;

writeln('ich massiv:');

for i:=1 to n do write (x[i]:6);

readln;

end.

Сортировка элементов массива методом вставки на языке программирования Pascal

 

program vstavka;

uses crt;

const n=10;

arr:array [1..n] of real=(25,11,-8,0,99,25,0,19,14,-17);

var i,j:byte;

procedure InsertionSort(var Arr : array of Real; N : Integer);

var

I : Integer;

J : Integer;

K : Integer;

Tmp : Real;

begin

dec(N);

i:=1;

repeat

j:=0;

repeat

if Arr[i]<=Arr[j] then

begin

k:=i;

Tmp:=Arr[i];

repeat

Arr[k]:=Arr[k-1];

dec(k);

until not(k>j);

Arr[j]:=Tmp;

j:=i;

end;

else inc(j);

until not(j<i);

inc(i);

until not(i<=n);

end;

begin

clrscr;

writeln ('massiv');

for i:=1 to n do

writeln (arr[i]:2:2);

writeln ('otsortirovannii massiv');

InsertionSort (arr,n);

for i:=1 to n do

writeln (arr[i]:2:2);

readln;

end.

Исходный код программ на языке программирования Pascal, сортировка выбором, вставкой, пузырьковая, слиянием, шейкерная. Краткое описание алгоритмов

 

Сортировка методом вставки. Алгоритм и программа на языке Pascal

Массив разделяется на 2 части – отсортированную и не отсортированную. Элементы из не отсортированной части поочередно выбираются и вставляются в отсортированную часть так.

Чтобы не нарушить в ней упорядоченность элементов. Сначала в отсортированном массиве находится только первый элемент. Следующий элемент присваивается переменной

programsort_vstavka;   

usescrt;

        constn=10; x:array[1..n] of integer=(25,11,-8,0,99,25,0,19,14,-17);

        var i,j,k:byte; a:integer;

begin clrscr;

      writeln ('ish massiv:');

      for i:=1 to n do

      write (x [i]:6);

      writeln;

      for i:=2 to n do

      begin

           a:=x[i];

           j:=1;

           while a>x[j] do j:=j+1;

           for k:=i-1 downto j do x[k+1]:=x[k];

           x[j]:=a;

      end;

      writeln ('otsort masiv:');

      for i:=1 to n do write (x[i]:6);

      readln;

end.

 

Пузырьковая сортировка. Алгоритм и программа на языке Pascal

Элемент списка последовательно сравниваются между собой и меняются местами в том случае, если предшествующий элемент больше последующего.

program sort_puzir;

        uses crt;

        const n=10;

        x:array [1..n] of integer=(25,11,-8,0,99,25,0,19,14,-17);

        var i,j:byte;

a:integer;

begin

clrscr;

      writeln ('ish massiv:');

      for i:=1 to n do write (x[i]:6);

      writeln;

      for j:=n downto 2 do

      for i:=1 to j-1 do

      if x[i]>x[i+1]

      then begin

      a:=x[i];

      x[i]:=x[i+1];

      x[i+1]:=a;

      end;

      writeln ('ots massiv:');

      for i:=1 to n do write (x[i]:6);

      readln;

end.

 

Сортировка выбором. Алгоритм и программа на языке Pascal

Сначала в неупорядоченном списке выбирается и отделяется от остальных наименьший элемент. Исходный список оказывается измененным. Измененный список принимается за исходный и процесс продолжается до тех пор, пока все элементы не будут выбраны. Выбранные элементы образуют упорядоченный список.

programsort_vibor;

usescrt;

constn=10;

x:array[1..n] ofinteger=(25,11,-8,0,99,25,0,19,14,-17);

var i,j,nmin:byte;

min:integer;

begin

clrscr;

writeln('ich massiv:');

for i:=1 to n do write (x[i]:6);

writeln;

for j:=1 to n-1 do

begin

min:=x[j];

nmin:=j;

for i:=j+1 to n do

if x[i]<min then begin

min:=x[i];

nmin:=i;

end;

x[nmin]:=x[j];

x[j]:=min;

end;

writeln('ich massiv:');

for i:=1 to n do write (x[i]:6);

readln;

end.

 

Сортировка слиянием. Алгоритм и программа на языке Pascal

Сначала анализируются первые элементы обоих массивов. Меньший элемент переписывается в новый массив, а оставшийся последовательно сравнивается с элементами из другого массива. В новый массив после каждого сравнения попадает меньший элемент. Так продолжается до исчерпания элемента одного из массивов. Затем остаток другого массива записывает в новый массив.

program Sliyanie;    

uses crt;                                 

var a,b,c:array[1..500] of integer;

    n,m,i,j,k:integer;

begin

clrscr;

write('n=');readln(n);

write('m=');readln(m);

writeln('Massiv A:');

for i:=1 to n do  

   begin

    a[i]:=2*i+1;

    write(a[i],' ');

   end;

writeln;

writeln('Massiv B:');

 for i:=1 to m do

   begin

    b[i]:=2*i;

    write(b[i],' ');

   end;

writeln;

i:=1; j:=1; k:=1;

while (i<=n) or (j<=m) do   

  begin

   if (i<=n) and (j<=m) then

     begin

       if a[i]<b[j] then

        begin

         c[k]:= a[i];

         inc (i);

         inc (k);

        end

       else

        begin

         c[k]:= b[j];

         inc (j);

         inc (k);

        end

     end

   else if j>m then

     begin

       c[k]:= a[i];

       inc (i);

       inc (k);

     end

   else if i>n then

     begin

       c[k]:= b[j];

       inc (j);

       inc (k);

     end;

  end;

writeln('Massiv C:');

for i:=1 to m+n do

write(c[i],' ');

readln

end.

 

Шейкерная сортировка. Алгоритм и программа на языке Pascal

Сравниваются не соседние элементы, а расположенные на расстоянии d=[n/2], где d– шаг между сравниваемыми элементами, а [] – целая часть числа. После каждого просмотра d уменьшается вдвое. На последнем просмотре d=1.

programShakerSort;

    constlim= 50;

    typeT= Integer;

    Vector = array[1..lim] of T;

    Var  i, N, L, R, p : Byte;         

          tmp: T;

          flag: Boolean;         

          a: Vector;

Begin   

    Readln(N);

    For i:=1 to N do Begin

       Readln(a[i]);   

    End;   

    L:=1; R:=N;   

    Repeat         

        flag:=true;         

        For i:=L to R-1 do Begin              

           If a[i] > a[i+1] then Begin

              tmp:=a[i]; a[i]:=a[i+1]; a[i+1]:=tmp;

              p:=i;                  

              flag:= false;             

           End;

        End;

        R:=p;

        For i:=R-1 downto L do Begin

           If a[i] > a[i+1] then Begin

              tmp:=a[i]; a[i]:=a[i+1]; a[i+1]:=tmp;

              p:=i;

              flag:=false;         

           End;

        End;

        L:=p+1;   

    until flag; 

    Write('Результатсортировки:'); 

    For i:=1 to n do Begin

        Write(a[i],'  ')    

    End;

End.