Назад (Информатика).

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

При сортировке массива M[0], M[1], ..., M[n-1] методом простого выбора среди всех элементов находится элемент с наименьшим значением M[i], и M[0] и M[i] обмениваются значениями. Затем этот процесс повторяется для получаемых подмассивов M[1], M[2], ..., M[n-1], ... M[j], M[j+1], ..., M[n-1] до тех пор, пока мы не дойдем до подмассива M[n-1], содержащего к этому моменту наибольшее значение.

Общий алгоритм

function Grade (Array[], LengthOfArray) {
     if (LengthOfArray < 2) then return Array[];
     else {
          FirstIndex:=1;
          while (FirstIndex < LengthOfArray) do {
               i:=FirstIndex;
               MinValue:= Array[i-1];
               MinIndex:= i-1;
               while (i < LengthOfArray) do {
                    if (MinValue > Array[i]) then {
                         MinValue:= Array[i];
                         MinIndex:= i;
                    }
                    i:=i+1;
               }
               if (MinIndex <> (FirstIndex-1)) then {
                    Array[MinIndex]:= Array[FirstIndex-1];
                    Array[FirstIndex-1]:= MinValue;
               }
               FirstIndex:=FirstIndex+1;
          }
          return Array[];
     }
}

Pascal

program primer;
const n=5;
var a: array [1..n] of integer;
     i, firstIndex, minValue, minIndex: integer;
begin
     // заполнение массива случайными целыми числами от 10 до 99
     randomize;
     for i:=1 to n do begin
          a[i]:=trunc((99-10)*random+10);
     end;

     // вывод исходного массива
     write('Исходный массив: ');
     for i:=1 to n do begin
          write ('a[', i, ']=>', a[i]:3, '; ');
     end;
     writeln;

     // сортировка выбором
     if not (n<2) then begin
          firstIndex:=2;
          while (firstIndex<=n) do begin
               i:=firstIndex;
               minValue:=a[i-1];
               minIndex:=i-1;
               while (i<=n) do begin
                    if (minValue>a[i]) then begin
                         minValue:=a[i];
                         minIndex:=i;
                    end;
                    inc(i);
               end;
               if (minIndex<>firstIndex-1) then begin
                    a[minIndex]:=a[firstIndex-1];
                    a[firstIndex-1]:=minValue;
               end;
               inc(firstIndex);
          end;
     end;

     // вывод отсортированного массива
     write('Отсортированный массив: ');
     for i:=1 to n do begin
          write ('a[', i, ']=>', a[i]:3, '; ');
     end;
     writeln;writeln;
end.