Cod sursa(job #1745933)

Utilizator Horia14Horia Banciu Horia14 Data 22 august 2016 15:31:50
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<cstdio>
#define NMax 500000
using namespace std;

int a[NMax], n;

void Read()
{
    FILE *fin = fopen("algsort.in","r");
    fscanf(fin,"%d",&n);
    for(int i=0; i<n; i++)
        fscanf(fin,"%d",&a[i]);
    fclose(fin);
}

int Div(int p, int q)
{
    int left = p , right = q, pivot = a[p];
    while(left < right)
    {
        while(left < right && a[right] >= pivot) right--;
        a[left] = a[right];
        while(left < right && a[left] <= pivot) left++;
        a[right] = a[left];
    }
    a[left] = pivot;
    return left;
}

void quicksort(int p, int q)
{
    int m = Div(p, q);
    if(m-1 > p) quicksort(p, m-1);
    if(m+1 < q) quicksort(m+1, q);
}

int main()
{
    FILE *fout = fopen("algsort.out","w");
    Read();
    quicksort(0, n-1);
    for(int i=0; i<n; i++)
        fprintf(fout,"%d ",a[i]);
    fclose(fout);
    return 0;
}