Cod sursa(job #1846093)

Utilizator diana97Diana Ghinea diana97 Data 12 ianuarie 2017 10:12:22
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

const int NMAX = 500000 + 1;

int n;
int numbers[NMAX];

void read_data() {
	f >> n;

	for (int i = 0; i < n; i++)
		f >> numbers[i];
}

int get_random(int min, int max) {
	return rand() % (max - min + 1) + min;
}


void quicksort(int left, int right) {
	if (left >= right) return;

	int pivotPosition = get_random(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);
}

int main() {
 	srand(time(NULL));
	read_data();
	quicksort(0, n - 1);

	for (int i = 0; i < n; i++)
		g << numbers[i] << ' ';
	g << '\n';

	return 0;
}