Cod sursa(job #1260240)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 11 noiembrie 2014 00:57:00
Problema Sortare prin comparare Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.95 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 = left + rand() % (right - left);
        swap(no, right);
        int q = partition(left, right);
        quicksort(left, q - 1);
        quicksort(q + 1, right);
    }
}

int main()
{
    int n, i;
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for (i = 0; i < n; i++) scanf("%d", &v[i]);
    srand(time(NULL));
    quicksort(0, n - 1);
    for (i = 0; i < n; i++) printf("%d ", v[i]);
    printf("\n");
    return 0;
}