Cod sursa(job #1846088)

Utilizator diana97Diana Ghinea diana97 Data 12 ianuarie 2017 10:00:08
Problema Sortare prin comparare Scor 60
Compilator java Status done
Runda Arhiva educationala Marime 1.54 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 int getRandom(int min, int max) {
   		Random rand = new Random();
  		return rand.nextInt(max - min + 1) + min;
  	}


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

		int pivotPosition = getRandom(left, right);
		int pivot = numbers[pivotPosition];

		int i = left;
		int j = right;

		while (i < j) {
			while (numbers[i] < pivot && i < right) i++;
			while (numbers[j] > pivot && left < j) j--;

			if (i <= j) {
				int aux = numbers[i];
				numbers[i] = numbers[j];
				numbers[j] = aux;
				i++;
				j--;
			}
		}

		if (left < j) quickSort(left, j);
		if (i < right) quickSort(i, right);
	}

	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();

			quickSort(0, numbers.length - 1);

			for (int number: numbers) {
				writer.print(number);
				writer.print(' ');
			}

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