Cod sursa(job #1260385)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 11 noiembrie 2014 10:58:47
Problema Sortare prin comparare Scor 40
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 = v[a];
    v[a] = v[b];
    v[b] = tmp;
}

int partition(int left, int right) 
{
    int i = left - 1, j;
    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);
    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 = 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;
}