Cod sursa(job #2607543)

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

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;
    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 + 70 > dr)InsertionSort(st,dr);
        else
        {
            int p = pivot(st,dr);
            quicksort(st,p-1);
            quicksort(p+1,dr);
        }
    }
}

void citire()
{
    freopen("algsort.in","r",stdin);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&v[i]);
}

void afis()
{
    freopen("algsort.out","w",stdout);
    quicksort(1,n);
    for(int i=1;i<=n;++i)
        printf("%d ",v[i]);
}
int main()
{
    citire();
    afis();

}