Cod sursa(job #2077500)

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


FILE *fi, *fo;
int n, i, j;

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

int part(int a[], int st, int dr){
	srand(time(NULL));
	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]);
	}
	return idx_max;
}

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


int main(){
	fi = fopen("input.in", "r");
	fo = fopen("output.out", "w");
	fscanf(fi, "%d", &n);
	int *a;
	a = (int *)malloc((n + 1) * sizeof(int));
	for (i = 0; i < n; i++) fscanf(fi, "%d", a + i);
	quickSort(a, 0, n - 1);
	for (i = 0; i < n; i++) fprintf(fo, "%d ", a[i]);
	return 0;
}