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