Guest User

http://stackoverflow.com/questions/42954541/sort-only-either

a guest
Mar 22nd, 2017
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define ODD 'o'
  5. #define EVEN 'e'
  6. #define REMAINDER_EVEN 0
  7. #define REMAINDER_ODD 1
  8.  
  9.     void sort_integers(int *integer_list, int num_integers, int sort_type_remainder)
  10.     {
  11.         int i, j, aux, offset = 1;
  12.         for(i = 0; i < num_integers - 1; i++)
  13.         {
  14.             offset = 1;
  15.             for(j = 0; j + offset < num_integers - i; j++)
  16.             {
  17.                 if(abs(integer_list[j] % 2) != sort_type_remainder) //first element to be compared is of wrong type, skip
  18.                 {
  19.                     j++;
  20.                 }
  21.                 else
  22.                 {
  23.                     //first element is of good type, but second element is not, increase offset and reloop first element
  24.                     if(abs(integer_list[j + offset] % 2) != sort_type_remainder)
  25.                     {
  26.                         j--;
  27.                         offset++;
  28.                     }
  29.                     else //both elements are of good type, bubble sort them
  30.                     {
  31.                         if(integer_list[j] > integer_list[j + offset])
  32.                         {
  33.                             aux = integer_list[j + offset];
  34.                             integer_list[j + offset] = integer_list[j];
  35.                             integer_list[j] = aux;
  36.                         }
  37.                         offset = 1;
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.     }
  43.  
  44. int main()
  45. {
  46.     char sort_type[4];
  47.     int num_integers;
  48.  
  49.     scanf("%s", sort_type); //arrays resolve to &sort_type[0]
  50.     scanf("%d", &num_integers);
  51.  
  52.     int *integer_list = malloc(num_integers * sizeof(int));
  53.     int i;
  54.     for(i = 0; i < num_integers; i++)
  55.     {
  56.         scanf("%d", &integer_list[i]);
  57.     }
  58.  
  59.     if(sort_type[0] == EVEN)
  60.         sort_integers(integer_list, num_integers, REMAINDER_EVEN);
  61.     else
  62.         sort_integers(integer_list, num_integers, REMAINDER_ODD);
  63.  
  64.     printf("\n");
  65.     for(i = 0; i < num_integers; i++)
  66.     {
  67.         printf("%d ", integer_list[i]);
  68.     }
  69.  
  70.     return 0;
  71. }
Add Comment
Please, Sign In to add comment