Требуется отсортировать массив по возрастанию.
Решение
Для этого можно воспользоваться следующим алгоритмом.
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.
Программа к учебнику информатики для 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.