Cod sursa(job #1260396)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 11 noiembrie 2014 11:10:09
Problema Sortare prin comparare Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>

int v[500001];

void swap(int a, int b)
{
    int tmp = v[a];
    v[a] = v[b];
    v[b] = tmp;
}

void quicksort(int left, int right) 
{
    if (left < right) {
        int no = rand() % (right - left) + left;
        swap(no, right);
        int i = left - 1, j, q;
        int pivot = v[right];
        for (j = left; j <= right - 1; j++) {
            if (v[j] <= pivot) {
                i = i + 1;
                swap(i, j);
            }
        }
        swap(i + 1, right);
        q = i + 1;
        quicksort(left, q - 1);
        quicksort(q + 1, right);
    }
}

int main()
{
    int n, i;
    FILE *fdin = fopen("algsort.in", "r");
    FILE *fdout = fopen("algsort.out", "w");
    fscanf(fdin, "%d", &n);
    for (i = 1; i <= n; i++) fscanf(fdin, "%d", &v[i]);
    srand(time(NULL));
    quicksort(1, n);
    for (i = 1; i <= n; i++) fprintf(fdout, "%d ", v[i]);
    fprintf(fdout, "\n");
    fclose(fdin);
    fclose(fdout);
    return 0;
}