Расширенная сортировка массивов / перестановка в Java

Итак, у меня есть массив со следующими теоретическими значениями:

int[] elements = {A1, A2, B1, B2,
                  A3, A4, B3, B4,
                  C1, C2, D1, D2,
                  C3, C4, D3, D4};

Иллюстративный рисунок:

                  + - + - + - + - +
                  | A | A | B | B |
                  + - + - + - + - +
                  | A | A | B | B |
                  + - + - + - + - +
                  | C | C | D | D |
                  + - + - + - + - +
                  | C | C | D | D |
                  + - + - + - + - +

Проще говоря, я хотел бы, чтобы массив был преобразован в следующую форму:

int[] elements = {A1, A2, A3, A4,
                  B1, B2, B3, B4,
                  C1, C2, C3, C4,
                  D1, D2, D3, D4};

Иллюстративный рисунок:

                  + - + - + - + - +
                  | A | A | A | A |
                  + - + - + - + - +
                  | B | B | B | B |
                  + - + - + - + - +
                  | C | C | C | C |
                  + - + - + - + - +
                  | D | D | D | D |
                  + - + - + - + - +

Этот конкретный пример содержит четыре сектора (A, B, C и D), но алгоритм, который мне нужен, должен работать независимо от того, сколько или несколько секторов содержит массив, и сколько элементов содержит каждый сектор.

Размер каждого сектора известен (ширина и высота сектора), а также количество секторов (строк и столбцов). Все секторы имеют одинаковый размер (ширину и высоту). Количество секторов должно быть описано как два значения (строки и столбцы), которые затем умножаются, чтобы получить фактическую сумму секторов. Например. если требуется 5 секторов, то можно указать 1 строку и 5 столбцов.

Здесь следует пример того, как может выглядеть метод предварительной сортировки:

public int[] sectorSort(int[] elements,
                        int sectorWidth,
                        int sectorHeight,
                        int columns,
                        int rows);

Пример других настроек сектора:

                  Columns: 5
                  + - + - + - + - + - + - + - + - + - + - +
                  | A | A | B | B | C | C | D | D | E | E |
     Rows: 1      + - + - + - + - + - + - + - + - + - + - +
                  | A | A | B | B | C | C | D | D | E | E |
                  + - + - + - + - + - + - + - + - + - + - +

                  Columns: 2
                  + - + - + - + - +
                  | A | A | B | B |
                  + - + - + - + - +
                  | A | A | B | B |
                  + - + - + - + - +
                  | C | C | D | D |
     Rows: 3      + - + - + - + - +
                  | C | C | D | D |
                  + - + - + - + - +
                  | E | E | F | F |
                  + - + - + - + - +
                  | E | E | F | F |
                  + - + - + - + - +

Я планирую использовать это, чтобы создать эффективный класс карты спрайтов для движка игры, который я делаю. . Элементы в массиве представляют собой значения цвета ARGB, а сектора - отдельные спрайты. Если разные спрайты расположены в последнем порядке, поиск отдельных спрайтов будет происходить намного быстрее и эффективнее с точки зрения памяти.

Спасибо!

РЕДАКТИРОВАТЬ 1: Ясность.

РЕДАКТИРОВАТЬ2: Добавлены дополнительные условия и пояснения.

6
задан Emanuel 20 October 2011 в 13:07
поделиться