Cod sursa(job #762169)

Utilizator ioana26Ioana Andronescu ioana26 Data 28 iunie 2012 23:47:35
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
/* 
Algoritm de sortare prin comparare - QuickSort.
*/

#include <stdio.h>
#include <stdlib.h>

#define MAX     500000

int numere[MAX];

int partitie(int start, int stop) {
    int st, dr;
    int temp;
    int pivot;
    
    pivot = st = start;
    dr = stop;
    temp = numere[start];

    while (st < dr) {
        while (numere[st] <= temp)
            st++;
        while (numere[dr] > temp)
            dr--;
        if (st < dr) {
            int aux = numere[st];
            numere[st] = numere[dr];
            numere[dr] = aux;
        }
    }
    numere[start] = numere[dr];
    numere[dr] = temp;
    return dr;
}

void quick_sort (int start, int stop) {
    int pivot;
    if (start < stop) {
        pivot = partitie(start, stop);
        quick_sort(start, pivot - 1);
        quick_sort(pivot + 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]);

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