Cod sursa(job #2077515)

Utilizator sandupetrascoPetrasco Sandu sandupetrasco Data 28 noiembrie 2017 10:18:11
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int n, i, j, a[500100];

void swap(int &a, int &b){
	int tmp = a;
	a = b;
	b = tmp;
}

int part(int st, int dr){
	int pivot = st + rand() % (dr - st + 1);
	
	int idx_min = st - 1, idx_max = dr + 1;
	while (1){
		do{ idx_min++; } while(a[idx_min] < a[pivot]);
		do{ idx_max--; } while(a[idx_max] > a[pivot]);
		
		if (idx_min >= idx_max) return idx_max;
		
		swap(a[idx_min], a[idx_max]);
	}
}

void quickSort(int st, int dr){
	if (st >= dr) return ;
	int mid = part(st, dr);
	quickSort(st, mid);
	quickSort(mid + 1, dr);
}


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