Пример одного из вариантов на скриншоте (Python).
Если на словах, то примерно так:
1. Разворачиваем исходный массив в одномерный.
2. Сортируем по обеим координатам (с приоритетом по X).
3. Из полученного одномерного массива делаем двумерный, сортируем элементы каждой строки по Y.
4. Транспонируем.
Алгоритм набросал навскидку и в лоб. Указанные условия вроде все соблюдены. Принцип показал, детали доработаете сами (порядок сортировки и т.д.).