Cod sursa(job #2100843)

Utilizator alindima99Alin Dima alindima99 Data 6 ianuarie 2018 14:04:01
Problema Sortare prin comparare Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

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

int partition(int *v, int l, int r)
{
    int poz=l+rand()%(l-r);

    swap(v, r, poz);
    int i=l, j;

    for(j=l;j<r;j++)
        if(v[j]<=v[r]){
            swap(v, i, j);
            i++;
        }

    swap(v, i, r);

    return i;
}

void sort(int *v, int l, int r)
{
    if(l<r){
        int poz=partition(v, l, r);

        sort(v, l, poz-1);
        sort(v, poz+1, r);
    }
}

int main()
{
    srand(time(NULL));
    int n,i;
    FILE *fin=fopen("algsort.in", "r"),
        *fout=fopen("algsort.out", "w");
    fscanf(fin, "%d", &n);
    int *v=(int*)malloc(sizeof(int)*n);

    for(i=0;i<n;i++)
        fscanf(fin, "%d", &v[i]);

    sort(v, 0, n-1);

    for(i=0;i<n;i++)
        fprintf(fout, "%d ", v[i]);

    return 0;
}