Cod sursa(job #1810121)

Utilizator RaresUrsRares Urs RaresUrs Data 19 noiembrie 2016 16:57:45
Problema Sortare prin comparare Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.93 kb
import java.util.*;
import java.io.File;
import java.io.PrintWriter;
  public class MergeSort {

    public static void main(String[] args) throws Exception {
      Scanner scanner = new Scanner(new File("algsort.in"));
      int nrOfElements = scanner.nextInt();
      int[] array = new int[nrOfElements];

      for(int i = 0 ; i< nrOfElements; i++) {
          array[i] = scanner.nextInt();
      }
      mergeSort(array);
      PrintWriter writer = new PrintWriter("algsort.out", "UTF-8");
      for(int i = 0 ; i< array.length ;i++ ) {
          writer.print(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++;
          }
      }
  }