Píšu kód, jenž by přijal pole o n číslech a půlil ho na menší pole do té doby, než délka vzniklého pole nebude 1. Vždy jako mezní hodnotu (jenž při půlení vyhodíme) vezme buď index, jenž je přesně uprostřed, nebo první číslo za polovinou.
Dejme tomu mám toto pole
[1,2,3,4,5,6,7,8,9,10]
Z něj má vzniknout:
[1,2,3,4,5] [7,8,9,10]
[1,2] [4,5] [7,8] [10]
[2] [5] [8]
Toto je můj návrh, pořád však přijímá tu samou půlku původního pole.
public int[][] divide(int[] values, int[][] split_values, int index) { int root_index = 0; if(values.length > 1) { if(values.length % 2 != 0) { root_index = (values.length - 1) / 2; } else { root_index = (int) ((values.length) / 2); } int[] left_value = new int[root_index-1]; int[] right_value = new int[values.length - left_value.length - 1]; for(int i = 0; i < values.length; i++) { if(i < left_value.length) { left_value[i] = values[i]; } else if(i > left_value.length) { right_value[i-left_value.length] = values[i]; } }
split_values[index] = left_value; index++; split_values[index] = right_value; index++; } for(int[] value : split_values) { divide(value, split_values, index); } return split_values; }