Odds before Evens Given a list of integers, rearrange them so that all of the odd integers appear before all of the even integers, without otherwise changing the order. An obvious solution is OddBeforeEven[data_List]:= Join[Cases[data, _?OddQ], Cases[data, _?EvenQ]] But this isn't particularly efficient, so maybe we can try OddBeforeEven[data_List]:= Join[Select[data, OddQ], Select[data, EvenQ]] Now, an innovative solution could also be something like OddBeforeEven[data_List]:= Flatten@GatherBy[data, OddQ] But I can't seem to improve it further. Can we optimize OddQ and EvenQ using Bit operations?