JSFiddle - React, Tailwind, and code Playground
by TCloud
HTML
<div id="console"></div>
CSS
body, body * {
color: #fff;
background-color: #222233;
}
JavaScript
/*
Задача:
Сортировка по возрастанию методом выбора максимума.
Области сортировки:
2 и 3 квадрант.
*/
let isMax = function isMax(max, min) {
if(max > min){
return true
}
return false
}
/*
* Функция для перемещения элементов матрицы.
* Меняет элементы местами.
*/
let swap = function swap(matrix, x1, x2, y1, y2) {
/*
* Меняем переменные местами.
*/
matrix[y1][y2] = [matrix[x1][x2], matrix[x1][x2] = matrix[y1][y2]][0]
/*
* Возвращаем измененую матрицу.
*/
return matrix
}
/*
* Функция для сортировка по возрастанию методом выбора максимума.
*/
let sortQuickMax = function sortQuickMax(matrix) {
/*
* Проверка на ввод данных.
* Функция вернет false в тх случаях, если
* 1) аргумент не массив (И)
* 2) длина переданного массива не четная. (ИЛИ)
* 3) длина массива первого элемента не четная. (ИЛИ)
*
*/
if(Array.isArray(matrix) && matrix.length % 2 != 0 || matrix[0].length % 2 != 0){
return false
}
/*
* Определяем центр матрицы.
*/
let middle = Math.round(matrix.length / 2)
/*
* Обход матрицы.
*/
matrix.map((row, i) => {
row.map((cell, j) => {
if( i < middle && j >= middle ) {
/*
* Сортировка 2-го квадранта.
*/
if( (j + 1 > middle) && matrix[i][j + 1] != undefined && isMax(matrix[i][j], matrix[i][j + 1]) ){
document.getElementById("console").innerHTML += `<br>2sqr, horz, i, j: ${matrix[i][j]}; i, j + 1: ${matrix[i][j + 1]} <hr>`
swap(matrix, i, j + 1, i, j)
}
if( i + 1 < middle && matrix[i + 1] != undefined && isMax(matrix[i + 1][j], matrix[i][j]) ){
document.getElementById("console").innerHTML += `<br>2sqr, vert, i, j: ${matrix[i][j]}; i + 1, j: ${matrix[i + 1][j]} <hr>`
swap(matrix, i + 1, j, i, j)
}
}else if( i >= middle && j < middle ){
/*
* Сортировка 3-го квадранта.
*/
if( j + 1 <= middle && matrix[i][j + 1] != undefined && isMax(matrix[i][j], matrix[i][j + 1]) ){
document.getElementById("console").innerHTML +=...