How about this solution
#include<stdio.h>
  int main()
  {
  int i;
  int arr[]={ 2, 1 ,4 ,3 ,6 ,5 ,8 ,7 ,9};
  int arr_size = sizeof(arr)/sizeof(arr[0]);
  int sorted[arr_size];
  int sp = 0;
  for(i=0;i<arr_size;i++){
     if(arr[i]&1){
        sorted[sp++]=arr[i];
     }
  }
  for(i=0;i<arr_size;i++){
     if(!(arr[i]&1)){
        sorted[sp++]=arr[i];
     }
  }
  for(i=0;i< arr_size ;i++)
    printf("%d  ", sorted[i]);
 return 0;
}
the output is
 1  3  5  7  9  2  4  6  8  
** UPDATE **
while the above uses more space and runs over the list twice, the following runs over the list only once, but still use more space
 int main(){
  int i;
  int arr[]={ 2, 1 ,4 ,3 ,6 ,5 ,8 ,7 ,9};
  int arr_size = sizeof(arr)/sizeof(arr[0]);
  int sorted[arr_size];
  int even = 1+arr_size/2;
  int odd  = 0;
  for(i=0;i<arr_size;i++){
     if(arr[i]&1)
        sorted[odd++]=arr[i];
     else
        sorted[even++]=arr[i];
  }
  for(i=0;i< arr_size ;i++)
    printf("%d  ", sorted[i]);
 return 0;
}
3
solved odds to the first and evens last