Сортировка неповозрастанию - Turbo Pascal
Формулировка задачи:
Решение задачи: «Сортировка неповозрастанию»
const max_col = 4; max_row = 4; type tdirection = (right, left_down, down, right_up); const delta: array[tdirection] of record X, Y: integer end = ( (X: 1; Y: 0), (X:-1; Y: 1), (X: 0; Y: 1), (X: 1; Y:-1) ); function get_next(var dir: tdirection; var col, row: integer): boolean; var new_col, new_row: integer; ok: boolean; begin get_next := false; if (row = max_row) and (col = max_col) then exit; case dir of right: if row = 1 then dir := left_down else dir := right_up; down: if col = 1 then dir := right_up else dir := left_down; end; repeat new_col := col + delta[dir].x; new_row := row + delta[dir].y; ok := (new_col >= 1) and (new_col <= max_col) and (new_row >= 1) and (new_row <= max_row); if not ok then case dir of right: dir := down; left_down: dir := down; down: dir := right; right_up: dir := right; end; until ok; col := new_col; row := new_row; get_next := true; end; var a: array[1 .. max_row, 1 .. max_col] of integer; dir: tdirection; i, j, _col, _row, first_row, first_col, mx_row, mx_col: integer; value: integer; T: integer; begin writeln('before:'); for _row := 1 to max_row do begin for _col := 1 to max_col do begin a[_row, _col] := random(20); write(a[_row, _col]:4); end; writeln; end; for i := 1 to max_row * max_col - 1 do begin _col := 1; _row := 1; dir := right_up; for j := 1 to pred(i) do get_next(dir, _col, _row); first_col := _col; first_row := _row; mx_row := first_row; mx_col := first_col; repeat if a[mx_row, mx_col] < a[_row, _col] then begin { <--- Здесь можно изменить направление } mx_row := _row; mx_col := _col; end until not get_next(dir, _col, _row); T := a[first_row, first_col]; a[first_row, first_col] := a[mx_row, mx_col]; a[mx_row, mx_col] := T; end; writeln('after:'); for _row := 1 to max_row do begin for _col := 1 to max_col do begin write(a[_row, _col]:4); end; writeln; end; end.
Объяснение кода листинга программы
Этот код реализует алгоритм сортировки пузырьком. Он начинается с первой строки и первого столбца массива и сравнивает текущую пару элементов (текущую строку и столбец) с последующей парой. Если текущая пара меньше последующей, то он меняет их местами. Этот процесс повторяется до тех пор, пока массив не будет полностью отсортирован.
Код использует вложенные циклы для прохода по массиву. Внешний цикл отвечает за проход по строкам массива, а внутренний цикл - за проход по столбцам.
Функция get_next
используется для определения следующего шага движения вправо или вниз. Она проверяет, достигли ли мы конца строки или столбца, и если да, то меняет направление движения на противоположное.
В конце кода выводится отсортированный массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д