можно переносить все блоки одновременно (в одном цикле), при этом пустые ячейки добавляют +1 к размеру пустоты. это сдвиг на х позиций влево, где х меняется по ходу сдвига. Добавлено:
хотя если порядок артов не важен, то алгоритм этопростоего будет работать намного быстрее.