Отсортировать массив по неубыванию методом "выбор максимума" - Pascal
Формулировка задачи:
Требуется отсортировать массив по неубыванию методом "выбор максимума".
ВХОДНЫЕ ДАННЫЕ
В первой строке вводится одно натуральное число, не превосходящее 1000 — размер массива. Во второй строке задаются N чисел — элементы массива (целые числа, не превосходящие по модулю 1000).
ВЫХОДНЫЕ ДАННЫЕ
Вывести получившийся массив.
ПРИМЕРЫ
ВВОД ВЫВОД
2
3 1
1 3
Решение задачи: «Отсортировать массив по неубыванию методом "выбор максимума"»
textual
Листинг программы
var a:array[1..1000] of integer; n,m,i,j,k,jmx,x:integer; begin read(n); for i:=1 to n do read(a[i]); m:=0;{количество отсортированных} i:=1;{начало массива} while i<n do {пока не конец - 1 } begin jmx:=1; {пусть это пока индекс максимума} for j:=1 to n-m do{с начала до уже выставленного на место максимума} if a[j]>a[jmx] then jmx:=j;{находим индекс самого макс.} x:=a[jmx];{запомним значение} for k:=jmx to n-m-1 do {сдвинем на него все не отсортированные элементы} a[k]:=a[k+1]; a[n-m]:=x;{вставим очередной максимум на место} m:=m+1; {увеличим количество отсортированных} i:=i+1; {идем вперед} end; for i:=1 to n do write(a[i]:4); end.
Объяснение кода листинга программы
- Создается переменная
a
типаarray[1..1000] of integer;
, которая будет представлять собой массив целых чисел. - Затем определяются следующие переменные:
n
,m
,i
,j
,k
,jmx
иx
. Переменнаяn
будет использоваться для чтения количества элементов в массиве, а переменныеm
,i
,j
,k
иjmx
будут использоваться для сортировки массива. Переменнаяx
будет использоваться для хранения значения максимального элемента. - Далее происходит чтение значений из массива
a
и сохранение их в соответствующих переменных. - Затем устанавливается начальное значение переменной
m
равным 0, так как на данный момент еще не было найдено максимальное значение. - Затем начинается цикл
while
, который будет выполняться до тех пор, пока не будет достигнут конец массива (т.е.i
станет большеn
). Внутри циклаwhile
устанавливается начальное значение переменнойjmx
равным 1, так как это будет первый элемент, который будет рассматриваться как возможный максимальный элемент. - Далее идет цикл
for
, который выполняется от 1 доn-m
, гдеn-m
- это количество элементов, которые уже были отсортированы. Внутри циклаfor
проверяется условиеif a[j] > a[jmx] then jmx := j
, т.е. если текущий элементa[j]
больше текущего максимального элементаa[jmx]
, тоjmx
обновляется на значениеj
. Таким образом, на каждом шаге циклаjmx
будет указывать на текущий максимальный элемент. - После того, как был найден новый максимальный элемент, его значение сохраняется в переменной
x
. - Затем происходит сдвиг всех элементов массива, которые не были отсортированы, на один шаг влево, чтобы создать место для нового максимального элемента. Это делается путем присваивания значения
a[k]
значенияa[k+1]
. - После завершения цикла
for
значение переменнойm
увеличивается на 1, так как был добавлен еще один отсортированный элемент. - Затем цикл
while
повторяется снова, начиная с шага 3. - После завершения цикла
while
происходит вывод значений массиваa
с помощью функцииwrite
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д