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