Cod sursa(job #2607485)

Utilizator vali_27Bojici Valentin vali_27 Data 29 aprilie 2020 20:51:22
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 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)
{
    bool ok = 1;
    for(int i=st; ok && i<dr;++i)
        if(v[i] > v[i+1])ok = 0;
    if(ok)return;

    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;
    swap(v[st],v[(st+dr)/2]);
    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();
}