Cod sursa(job #2607524)

Utilizator vali_27Bojici Valentin vali_27 Data 29 aprilie 2020 21:17:07
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 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;
//    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;
//}

int pivot(int st,int dr)
{
    int piv = v[(st + dr)/2];
    for(;;)
    {
        while(v[st] < piv)st++;
        while(v[dr] > piv)dr--;
        if(st >= dr)return st;
        swap(v[st],v[dr]);
    }
}

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();

}