Cod sursa(job #762889)

Utilizator ioana26Ioana Andronescu ioana26 Data 30 iunie 2012 14:25:34
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.05 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) {
    int i = start - 1;
    int j = stop;

    int temp = numere[stop];

    if (stop <= start)
        return;
    while (1) {
        while (numere[++i] < temp)
            ;
        while (temp < numere[--j])
            if (j == start)
                break;
        if (i >= j)
            break;
        interschimb(&numere[i], &numere[j]);
    }
    interschimb(&numere[i], &numere[stop]);
    quicksort(start, i - 1);
    quicksort(i + 1, stop);

}

int main () {
    FILE *f_in = fopen("algsort.in", "r");
    FILE *f_out = fopen("algsort.out", "w");

    int n;
    int i;

    fscanf(f_in, "%d", &n);
    for (i = 0; i < n; i++)
        fscanf(f_in, "%d", &numere[i]);

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