Сортировка методом выбора

Сортировка методом выбора


Требуется отсортировать массив по возрастанию.


Решение


Для этого можно воспользоваться следующим алгоритмом.


1.        Найти максимальный элемент (max) в массиве (arr).

2.        Поместить его на последнее место (j).

3.        Элемент, находившийся в конце массива переместить на место, где прежде находился max.

4.        Уменьшить просматриваемую область массива на единицу (j - 1).

5.        Снова найти максимальный элемент в оставшейся области.

6.        Поместить его в конец просматриваемой области массива.

7.        и т.д.


Программа на языке Паскаль:    }


Program Vibor;

uses crt;

const n = 10;


var

    arr: array[1..n] of byte;

    max, id_max, i, j: byte;


begin

    randomize;

    for i := 1 to n do begin

        arr[i] := random(256);

        write(arr[i]:4)

    end;

    writeln;


    j := n;


    while j > 1 do 

            begin

        max := arr[1];

        id_max := 1;

        for i := 2 to j do

            if arr[i] > max then 

                begin

                max := arr[i];

                id_max := i

            end;

        arr[id_max] := arr[j];

        arr[j] := max;

        j := j - 1

       end;


    for i := 1 to n do

        write(arr[i]:4);


readln

end.


 Примечания:

Присваивание длины массива переменной j не обязательно. Вместо j в цикле while можно было использовать само n. Однако в конце мы выводим на экран отсортированный массив, поэтому требуется сохранить исходное значение n.



2. Сортировка выбором

 Программа к учебнику информатики для 10 класса К.Ю. Полякова и Е.А. Еремина. Глава 8. Программа № 43. 

 Вход: 

   1 

   3

   5 

   2 

   4

 Результат: После сортировки: 1 2 3 4 5


program selectSort;

const N = 5;

var A: array[1..N] of integer;

    i, j, c, nMin: integer;

begin

  writeln ( 'Введите элементы массива:' );

  for i:=1 to N do

    read ( A[i] );

  for i:=1 to N-1 do 

       begin

    nMin:= i;

    for j:=i+1 to N do

              if A[j] < A[nMin] then

                nMin:= j;

            if i <> nMin then 

               begin

              c:= A[i]; A[i]:= A[nMin]; 

               A[nMin]:= c;

            end

  end;

  writeln ( 'После сортировки: ' );

  for i:=1 to N do

    write ( A[i], ' ' );      

end.