Cod sursa(job #1260244)

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

int v[500001];

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

int partition(int left, int right) 
{
    int i = left - 1, j;
    int pivot = right;
    for (j = left; j < right; j++) {
        if (v[j] <= v[pivot]) {
            i = i + 1;
            swap(j, i);
        }
    }
    swap(i + 1, pivot);
    return (i + 1);
}

void quicksort(int left, int right) 
{
    if (left < right) {
        int no = rand() % (right - left) + left;
        swap(no, right);
        int q = partition(left, right);
        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 = 0; i < n; i++) fscanf(fdin, "%d", &v[i]);
    srand(time(NULL));
    quicksort(0, n - 1);
    for (i = 0; i < n; i++) fprintf(fdout, "%d ", v[i]);
    fprintf(fdout, "\n");
    fclose(fdin);
    fclose(fdout);
    return 0;
}