Cod sursa(job #1232618)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 23 septembrie 2014 15:46:37
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
#define SIZE 500000
#define RANDOM(a, b) ((a) + (rand() % ((b) - (a) + 1)))
using namespace std;

void swap(int A[], int i, int j)
{
	int aux = A[i];
	A[i] = A[j];
	A[j] = aux;
}

void insertion_sort(int A[], int left, int right)
{
	for (int i = left + 1; i <= right; ++i) 
	{
		int e = A[i];
		int j = i;
		while (j > 0 && A[j-1] > e) 
		{
			A[j] = A[j-1];
			--j;
		}
			
		A[j] = e;
	}
}

int partition(int A[], int left, int right)
{
	int randomIndex = RANDOM(left, right);
	
	swap(A, left, randomIndex);
	int pivot = A[left];
	int pivot_index = left;
	
	
	while (left <= right)
	{
		while (A[left] < pivot) ++left;
		while (A[right] > pivot) --right;
		
		if (left < right) swap(A, left++, right--);
	}
	
	return right;
}

void quicksort(int A[], int left, int right)
{
	if (left < right) 
	{
		int p = partition(A, left, right);
		quicksort(A, left, p);
		quicksort(A, p + 1, right);
	}
}

int main()
{
	ifstream ifs("algsort.in");
	ofstream ofs("algsort.out");
	
	srand(time(NULL));
	
	int A[SIZE], n;
	ifs >> n;
	
	for (int i = 0; i < n; ++i)	
		ifs >> A[i];
	
	//insertion_sort(A, 0, n-1);
	quicksort(A, 0, n-1);
	
	for (int i = 0; i < n; ++i)
		ofs << A[i] << " ";
	
	return 0;
}