I managed to do this with the help of a temporary array in the bubble() function.
Basically, using a nested loop, first we copy negative values, followed by positive values into the temporary array. When we're done, copy all items in temporary array back into original array.
There's a little bit of change in the bubble() forward declaration
void bubble( int*, size_t );
Implementation below ...