Cod sursa(job #906409)

Utilizator blustudioPaul Herman blustudio Data 6 martie 2013 20:12:28
Problema Sortare prin comparare Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int n, v[500000];

void swap(int *v, int a, int b)
{
	int aux = v[a];
	v[a] = v[b];
	v[b] = aux;
}
int partition (int *v, int p, int r)
{
	//int pivot = p + rand() % (r - p);
	int pivot = p + (r - p) / 2;
	int pivotValue = v[pivot];
	swap(v, pivot, r);
	int i = p;
	int j;
	for (j = p; j < r; j++)
	{
		if (v[j] <= pivotValue)
		{
			swap(v, i, j);
			i++;
		}
	}
	swap(v, i, r);
	return i;
}

void quick(int *v, int p, int r)
{
	if (p < r)
	{
		int q = partition(v, p, r);
		quick(v, p, q - 1);
		quick(v, q + 1, r);
	}
}

int main()
{
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	srand(time(NULL));
	int i;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &v[i]);
	quick(v, 0, n - 1);
	for (i = 0; i < n; i++)
		printf("%d ", v[i]);
	return 0;
}