2015-02-14 7 views
0

Мне интересно, есть ли способ разделить массив на два без оператора деления? Для задачи, которую я делаю, я не могу использовать/или удвоить. Я знаю размер массива, и я знаю, что могу установить размер двух вспомогательных массивов на половину исходного массива, но мне просто интересно, есть ли способ без жесткого кодирования. Спасибо.разделение массива на два без оператора деления

+8

Использование оператора разделения массива в любом случае не разбило бы его ... – Brendan

+3

Вы имеете в виду, что вы не хотите использовать что-то вроде array.length/2, чтобы определить среднюю точку? – MadProgrammer

+4

Вы можете использовать бит-сдвиги; смещение одной позиции вправо эквивалентно делению на два. – DennisW

ответ

3

Предполагая, что вы хотите найти средний индекс массива без использования оператора деления и вы на «использования/или двойная» означает, что вы не можете использовать значение с плавающей точкой (так умножении 0,5 является вне вопроса).

Вы можете ознакомиться с операторами bit-shift. Пример:

int[] myArray = new int[128]; 
int middleIndex = myArray.length >> 1; // middleIndex is now 64 
middleIndex = middleIndex >> 1;  // 32 

Смещение битов целого числа на одно положение справа эквивалентно делению на два.

0

Вы можете найти середину массива, установив одну переменную в ноль, а другую - в конец массива, а затем в инкремент цикла и уменьшите другую, пока не встретитесь или не пересечете.

Если ваш массив имеет нечетную длину, они в конечном итоге будут равны, и это будет индекс среднего элемента массива.

Если ваш массив имеет четную длину, они будут отличаться на единицу и отметят средние два элемента массива.

Смежные вопросы