Sort the elements in odd positions in descending order and elements in even positions in ascending order

Sort the elements in odd positions in descending order and elements in even positions in ascending order

For Example:


If the input is 

10
1 2 3 4 5 6 7 8 9 10

then the output should be 
9 2 7 4 5 6 3 8 1 10
Implementation:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
 int *a;
 int n;
 int i,j;
 
 /* get the size of array from the user */
 scanf("%d",&n);
 
 /* allocate the memory for the array of size n */
 a=(int*)malloc(sizeof(int)*n);
 
 /* get the 'n' values of the array from the user */
 for(i=0;i<n;i++)
  scanf("%d",(a+i));
 
 /* sort the elements in the odd positions in decreasing order */
 for(i=0;i<n;i+=2)
 {
  for(j=i+2;j<n;j+=2)
  {
   if(*(a+i) < *(a+j))
   {
    
    /* swap the numbers which is not in decreasing order */
    /* XOR swap of elements in indices i & j without using third variable */
    *(a+i) = *(a+i) ^ *(a+j);
    *(a+j) = *(a+i) ^ *(a+j);
    *(a+i) = *(a+i) ^ *(a+j);
   }
  }
 }
 
 /* sort the elements in the even positions in ascending order */
 for(i=1;i<n;i+=2)
 {
  for(j=i+2;j<n;j+=2)
  {
   
   /* sort the numbers in ascending order if they are not sorted */
   if(*(a+i) > *(a+j))
   {
    
    /* do an xor swap for the numbers that are not in ascending order */
    *(a+i) = *(a+i) ^ *(a+j);
    *(a+j) = *(a+i) ^ *(a+j);
    *(a+i) = *(a+i) ^ *(a+j);
   }
  }
 }
 
 /* print the elements of the array as:
 1. elements in odd positions in descending order
 2. elements in even positions in ascending order */
 for(i=0;i<n;i++)
  printf("%d ",*(a+i));
 
 return 0;
}