Cod sursa(job #762977)

Utilizator ioana26Ioana Andronescu ioana26 Data 30 iunie 2012 17:19:23
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.01 kb
/*
Algoritm de sortare prin comparare - QuickSort.
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define MAX     500000 
int numere[MAX];

void interschimb (int *a, int *b) {
    int aux;
    aux = *a;
    *a = *b;
    *b = aux;
}

void quicksort (int start, int stop) {
    if (start >= stop)
        return;

	int i = start - 1;
	int j = stop;
    interschimb(&numere[start + rand() % (stop - start)], &numere[stop]);
    int temp = numere[stop];

    while (i < j) {
        while (i < j && numere[++i] < temp)
            ;
        while (i < j && numere[--j] > temp)
            ;
        interschimb(&numere[i], &numere[j]);
    }

    interschimb(&numere[i], &numere[stop]);
    quicksort(start, i - 1);
    quicksort(i + 1, stop);
} 

int main () {
    int n;
	int i;

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

	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &numere[i]);
	quicksort(0, n - 1);
	for (i = 0; i < n; i++)
		printf("%d ", numere[i]);
	return 0;
}