Cod sursa(job #2636591)

Utilizator irimia_alexIrimia Alex irimia_alex Data 18 iulie 2020 19:01:03
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#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);
	int* p = v;
	for (int i = 1;i <= n;++i) {
		fscanf(fin, "%d", p);
		++p;
	}

	quickSort(1, n);

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

	return 0;
}