Итак, у меня есть массив со следующими теоретическими значениями:
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: Добавлены дополнительные условия и пояснения.