Cod sursa(job #2611216)

Utilizator ParALIParaschiv Alexandru-Andrei ParALI Data 6 mai 2020 16:15:56
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int N, v[500001], b[500001];
int pivot(int p, int u)
{
    int aux;
    int cp=0, cu=-1;///cp = pasul de crestere al lui p; cu = --||-- al lui u;
    while(p<u)
    {
        if(v[p]>v[u])
        {
            aux=v[p];
            v[p]=v[u];
            v[u]=aux;

            aux=cp;
            cp=-cu;
            cu=-aux;
        }
    p=p+cp;
    u=u+cu;
    }
    return p;
}

void quicksort(int p, int u)
{
    if(p<u)
    {
        int k=pivot(p,u);
        quicksort(p,k-1);
        quicksort(k+1,u);
    }
}

void interclasare(int, int, int);

void sortint(int p, int u)
{
    if(p<u)
    {
        int k=(p+u)/2;
        sortint(p,k);
        sortint(k+1,u);
        interclasare(p,u,k);
    }
}

void interclasare(int p, int u, int k)
{
    int i=p, j=k+1, m=1;
    for(;i<=k && j<=u;m++)
        if(v[i]<=v[j])
            b[m]=v[i++];
        else
            b[m]=v[j++];
    while(i<=k)
        b[m++]=v[i++];
    while(j<=u)
        b[m++]=v[j++];
    for(m=1,i=p;i<=u;i++,m++)
        v[i]=b[m];
}

int main()
{
    f>>N;
    for (int i=1;i<=N;i++)
        f>>v[i];
    //quicksort(1,N);
    sortint(1,N);
    for (int i=1;i<=N;i++)
        g<<v[i]<<' ';
    return 0;
}