Cod sursa(job #1007544)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 9 octombrie 2013 01:34:55
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <algorithm>
#include <cstdio>
using namespace std;
 
int part(int A[], int left, int right) {
	int pivot = A[right];
	int i = left;
	
	for (int j = left; j < right; ++j){
		int isSmaller = ~((A[j] - pivot) >> 31) + 1;
		int t = isSmaller & (~((i - j) >> 31) + 1);

		A[i] = A[i] + A[j] * t;
		A[j] = A[i] * t - A[j] * t + A[j] * (~t & 1);
		A[i] = A[i] - A[j] * t;

		i = i + isSmaller;
	}

	int tmp = A[i];
	A[i] = A[right];
	A[right] = tmp;
	
	return i;
}

void qsort(int A[], int left, int right){
	if (left < right){
		int q = part(A, left, right);
		qsort(A, left, q - 1);
		qsort(A, q + 1, right);
	}
}

int main()
{
	freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

	int N, v[500000];

    scanf("%d",&N);

    for (int i = 0; i < N; i++) scanf("%d", v + i);
	qsort(v, 0, N - 1);
    for (int i = 0; i < N; i++) printf("%d ",v[i]);
    
	return 0;
}