Cod sursa(job #1260239)

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

void swap(int *a, int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

int partition(int v[], 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(&v[j], &v[i]);
        }
    }
    swap(&v[i + 1], &v[pivot]);
    return (i + 1);
}

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

int main()
{
    int n, v[500001], 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(v, 0, n - 1);
    for (i = 0; i < n; i++) printf("%d ", v[i]);
    printf("\n");
    return 0;
}