Cod sursa(job #1810137)

Utilizator RaresUrsRares Urs RaresUrs Data 19 noiembrie 2016 17:16:47
Problema Sortare prin comparare Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.61 kb
import java.util.*;
import java.io.File;
import java.io.*;

  public class Main {

    public static void main(String[] args) throws IOException {
    InputReader reader = new InputReader("algsort.in");
    BufferedWriter writer = new BufferedWriter(new FileWriter("algsort.out"));
    int nrOf = reader.nextInt();
    int[] array = new int[nrOf];


    for(int  i = 0 ; i < nrOf; i++)  {
      array[i] = reader.nextInt();
    }
    mergeSort(array);
    for(int  i = 0 ; i < array.length;i++) {
        writer.write(array[i] + " ");
    }
    writer.close();
  }


      public static void mergeSort(int[] inputArray) {
          int size = inputArray.length;
          if (size < 2)
              return;
          int mid = size / 2;
          int leftSize = mid;
          int rightSize = size - mid;
          int[] left = new int[leftSize];
          int[] right = new int[rightSize];
          for (int i = 0; i < mid; i++) {
              left[i] = inputArray[i];

          }
          for (int i = mid; i < size; i++) {
              right[i - mid] = inputArray[i];
          }
          mergeSort(left);
          mergeSort(right);
          merge(left, right, inputArray);
      }

      public static void merge(int[] left, int[] right, int[] arr) {
          int leftSize = left.length;
          int rightSize = right.length;
          int i = 0, j = 0, k = 0;
          while (i < leftSize && j < rightSize) {
              if (left[i] <= right[j]) {
                  arr[k] = left[i];
                  i++;
                  k++;
              } else {
                  arr[k] = right[j];
                  k++;
                  j++;
              }
          }
          while (i < leftSize) {
              arr[k] = left[i];
              k++;
              i++;
          }
          while (j < leftSize) {
              arr[k] = right[j];
              k++;
              j++;
          }
      }

      private static class InputReader {
        BufferedReader reader;
        StringTokenizer tokenizer;

        InputReader(String fileName) throws FileNotFoundException {
            reader = new BufferedReader(new FileReader(fileName), 32768);
            tokenizer = null;
        }

        String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }
    }
  }