Cod sursa(job #1846069)

Utilizator diana97Diana Ghinea diana97 Data 12 ianuarie 2017 09:20:32
Problema Sortare prin comparare Scor 60
Compilator java Status done
Runda Arhiva educationala Marime 1.43 kb
import java.io.*;
import java.util.*;

class Main {
	private static int[] numbers;

	private static void readData(Scanner scanner) {
		int n = scanner.nextInt();
		numbers = new int[n];

		for (int i = 0; i < n; i++)
			numbers[i] = scanner.nextInt();
	}

	private static void mergeSort(int left, int right) {
		if (left >= right)
			return;

		int mid = (left + right) / 2;
		mergeSort(left, mid);
		mergeSort(mid + 1, right);

		int i = left, j = mid + 1, k = 0;
		int[] aux = new int[right - left + 1];
		while (i <= mid && j <= right) {
			if (numbers[i] <= numbers[j])
				aux[k++] = numbers[i++];
			else aux[k++] = numbers[j++];
		}

		for (; i <= mid; i++) aux[k++] = numbers[i];
		for (; j <= mid; j++) aux[k++] = numbers[j];

		for (i = 0; i < k; i++)
			numbers[left + i] = aux[i];
	}

	public static void main(String[] args) {
		try {
			File inputFile = new File("algsort.in");
			File outputFile = new File("algsort.out");

			FileInputStream inputStream = new FileInputStream(inputFile);
			FileOutputStream outputStream = new FileOutputStream(outputFile);

			Scanner scanner = new Scanner(inputStream);
			PrintWriter writer = new PrintWriter(outputStream);

			readData(scanner);
			scanner.close();
			inputStream.close();

			mergeSort(0, numbers.length - 1);

			for (int number: numbers)
				writer.print(Integer.toString(number) + ' ');

			writer.print('\n');
			writer.close();
			outputStream.close();
		} catch(IOException e) {};
	}
}