Пузырьковая сортировка двухмерного массива С++

Сортировки — дело нужное и полезное. В этой статье будет показан код пузырьковой сортировки двумерного массива. Несмотря на то, что пузырьковая сортировка сама по себе очень простая, двухмерность массива накладывает определённый фактор трудности на применение к нему сортировки. С одной стороны, можно считать, что все элементы массива памяти располагаются линейно, и сортировать двумерный массив как одномерный. В случае работы непосредственно с массивами такое решение пройдёт на ура, но иногда массивы представляют в виде указателей на массивы, а память им выделяют вручную. В таком случае массив нельзя представлять как одномерный, т. е. нужен другой подход к сортировке. Вот этот другой подход я и использую. Поскольку с указателями разбираться само по себе тяжело, в моём коде указателей не будет. Но тем не менее сортировка двумерного массива предполагает, что программист знаком с математикой, потому что нужно умение определять достижение допустимых границ при обходе массива, а кроме того представлять подсчёт максимального количества перестановок, чтобы не задавать бесполезного холостого хода при переборе максимума шагов или чтобы не случилось, что массив будет обработан не до конца. Даже если у вас этих умений сейчас нет, это не значит, что вы их не можете в себе развить. Нужно их развивать. А подобные задачи и хорошие примеры могут поспособствовать прогрессивному развитию таких умений.
Код сортировки, предлагаемый в этой статье, немного ужасен, но это наиболее простой вариант, который мне пришёл в голову. Основа самой сортировки происходит из пузырьковой сортировки одномерного массива, но если массив представлять как таблицу, то происходит дополнительная трудность: стенка и последний элемент. Последний элемент только один, но по случайности или незнанию за последний элемент можно принять каждый последний элемент очередной строки. В общем, последний элемент напрашивает для себя отдельной проверки: проверки, что он в последней строке, проверки, что он в последней колонке. Вторая сложность — это количество обходов. Чтобы хорошо понимать, сколько обходов на самом деле нужно в наихудшем случае, нужно уметь считать, сколько итераций происходит в цикле вообще и иметь представление о логарифмической сложности алгоритмов. Я не хочу грузить этими вещами читателя, да и сам пока что в этом дуб, поэтому грузить не стану. Просто поделился необходимыми сведениями.

Мне остаётся надеяться, что вы сможете разобраться, что это выложено мной не зря. Но помните, что пузырьковая сортировка не применяется при решении реальных задач, потому что очень неэффективна. Подобные задачи вам дают для того, чтобы в вас рос и укреплялся стержень осознания алгоритмов.
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/bill-fillips-7879021/programmirovanie-pod-android-16502000/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Демотиватор исходники есть?

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок