Filip_Markoski

[ADS] Odd even sorting

Nov 14th, 2017
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.18 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.lang.reflect.Array;
  5. import java.util.Arrays;
  6.  
  7. public class OddEvenSort {
  8.  
  9.     /*
  10. 8
  11. 6 10 13 5 8 17 2 5
  12.  
  13. 5 5 13 17 10 8 6 2
  14.  
  15. odds in asscending
  16. evens in descending
  17. */
  18.  
  19.     private static void printNumbers(int[] input) {
  20.         for (int i = 0; i < input.length; i++) {
  21.             System.out.print(input[i] + " ");
  22.         }
  23.         System.out.print(System.lineSeparator());
  24.     }
  25.  
  26.     private static final char INCREASING = '>';
  27.     private static final char DECREASING = '<';
  28.  
  29.     private static void insertionSort(int array[], char order) {
  30.         switch (order){
  31.             case INCREASING:
  32.                 for (int i = 1; i < array.length; i++) {
  33.                     int key = array[i];
  34.                     int j = i - 1;
  35.                     while (j > -1 && array[j] > key) {
  36.                         array[j + 1] = array[j];
  37.                         j--;
  38.                     }
  39.                     array[j + 1] = key;
  40.                     //printNumbers(array);
  41.                 }
  42.                 break;
  43.             case DECREASING:
  44.                 for (int i = 1; i < array.length; i++) {
  45.                     int key = array[i];
  46.                     int j = i - 1;
  47.                     while (j > -1 && array[j] < key) {
  48.                         array[j + 1] = array[j];
  49.                         j--;
  50.                     }
  51.                     array[j + 1] = key;
  52.                     //printNumbers(array);
  53.                 }
  54.                 break;
  55.         }
  56.  
  57.     }
  58.  
  59.     private static boolean isEven(int a){
  60.         return a % 2 == 0;
  61.     }
  62.  
  63.     static void oddEvenSort(int array[], int n) {
  64.         int odds[] = new int[n];
  65.         int evens[] = new int[n];
  66.         int lenOdds = 0;
  67.         int lenEvens = 0;
  68.  
  69.         for (int i = 0; i < array.length; i++) {
  70.             if (isEven(array[i])){
  71.                 evens[lenEvens++] = array[i];
  72.             } else {
  73.                 odds[lenOdds++] = array[i];
  74.             }
  75.         }
  76. /*
  77.         System.out.println("Odds");
  78.         printNumbers(odds);
  79.         System.out.println("Evens");
  80.         printNumbers(evens);
  81. */
  82.  
  83.         odds = Arrays.copyOf(odds, lenOdds);
  84.         evens = Arrays.copyOf(evens, lenEvens);
  85.  
  86.         insertionSort(odds, INCREASING);
  87.         insertionSort(evens, DECREASING);
  88.  
  89.         int k = 0;
  90.         for (int i = 0; i < lenOdds; i++) {
  91.             array[k++] = odds[i];
  92.         }
  93.         for (int i = 0; i < lenEvens; i++) {
  94.             array[k++] = evens[i];
  95.         }
  96.  
  97.         //printNumbers(array);
  98.     }
  99.  
  100.  
  101.     public static void main(String[] args) throws IOException {
  102.         int i;
  103.         BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  104.         String s = stdin.readLine();
  105.         int n = Integer.parseInt(s);
  106.  
  107.         s = stdin.readLine();
  108.         String[] pom = s.split(" ");
  109.         int[] a = new int[n];
  110.         for (i = 0; i < n; i++)
  111.             a[i] = Integer.parseInt(pom[i]);
  112.         oddEvenSort(a, n);
  113.         for (i = 0; i < n - 1; i++)
  114.             System.out.print(a[i] + " ");
  115.         System.out.print(a[i]);
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment