Cod sursa(job #2636611)

Utilizator irimia_alexIrimia Alex irimia_alex Data 18 iulie 2020 20:16:47
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")

#define NMAX 500005

FILE* fin, * fout;

int v[NMAX], n;

void swap(int* a, int* b) {
	int aux = *a;
	*a = *b;
	*b = aux;
}

int partition(int i, int j) {
	swap(&v[rand() % (j - i) + i], &v[j]);
	int k = i, l = i, p = v[j];
	for (;l < j;++l) {
		if (v[l] < p)
			swap(&v[k++], &v[l]);
	}
	swap(&v[k], &v[j]);

	return k;
}

void quickSort(int i, int j) {
	if (i >= j)
		return;
	int p = partition(i, j);
	quickSort(i, p - 1);
	quickSort(p + 1, j);
}

int main() {
	fin = fopen("algsort.in", "r");
	fout = fopen("algsort.out", "w");

	srand(time(NULL));

	fscanf(fin, "%d", &n);
	for (int i = 1;i <= n;++i)
		fscanf(fin, "%d", &v[i]);

	quickSort(1, n);

	for (int i = 1;i <= n;++i)
		fprintf(fout, "%d ", v[i]);

	return 0;
}