How to sort array odd numbers in descending order and even numbers in ascending order in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>

void print(int arr[], int len) { 
     for (int i = 0; i < len; i++) 
        printf("%i ", arr[i]);
    printf("\n");
}

int compare_function(const void *a, const void *b) {
   return ( *(int*)a - *(int*)b );
}

void make_odds_negative(int arr[], int len) {
    for (int i = 0 ; i < len ; i++) 
        if (arr[i] % 2 != 0)
            arr[i] *= -1; 
}

void odd_even_sort(int arr[], int len) { 
    make_odds_negative(arr, len);
  
    print(arr, len);
    
    qsort(arr, len, sizeof(int), compare_function);
    
    print(arr, len);
  
    make_odds_negative(arr, len);
} 

int main() 
{ 
    int arr[] = {3, 4, 6, 1, 2, 5}; 
    int len = sizeof(arr)/sizeof(int); 
    
    odd_even_sort(arr, len); 
    
    print(arr, len);
        
    return 0; 
} 



/*
run:

-3 4 6 -1 2 -5 
-5 -3 -1 2 4 6 
5 3 1 2 4 6 

*/

 



answered May 3, 2019 by avibootz
edited May 4, 2019 by avibootz
...