Cod sursa(job #2607482)

Utilizator vali_27Bojici Valentin vali_27 Data 29 aprilie 2020 20:48:01
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define NMAX 500001
#define MOD 666013
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int v[NMAX],n;

void InsertionSort(int st,int dr)
{
    for(int i = st+1; i<=dr; ++i)
    {
        int temp = v[i];
        int j = i - 1;
        while(j >= 1 && temp < v[j])
        {
            v[j+1] = v[j];
            j--;
        }
        v[j+1] = temp;
    }
}

int pivot(int st,int dr)
{
    int d = 0;
    while(st < dr)
    {
        if(v[st] > v[dr])swap(v[st],v[dr]), d = 1 - d;
        st += d;
        dr -= 1-d;
    }
    return st;
}

void quicksort(int st,int dr)
{
    if(st < dr)
    {
        if(st + 50 > dr)InsertionSort(st,dr);
        else
        {
            int p = pivot(st,dr);
            quicksort(st,p-1);
            quicksort(p+1,dr);
        }
    }
}

void citire()
{
    f >> n;
    for(int i=1;i<=n;++i)
        f >> v[i];
}

void afis()
{

    quicksort(1,n);
    for(int i=1;i<=n;++i)
        g << v[i] << ' ';
}
int main()
{
    citire();
    afis();
}