Cod sursa(job #2953045)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 10 decembrie 2022 13:23:00
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
#include <climits>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <bitset>
#include <map>
#include <cstring>
#include <algorithm>

#define NMAX 500003
#define LOG 20

using namespace std;



ifstream fin("algsort.in");
ofstream fout("algsort.out");

int n;
int v[NMAX];


void quickSort(int v[], int st, int dr)
{
    if (st < dr)
    {
        int mij = (st + dr) / 2;

        //aici voi considera primul element ca fiind pivotul
        int pivot = v[st];
        v[st] = v[mij];
        v[mij] = pivot;
        //dar orice alt element poate fi considerat pivot- schimband complexitatea
        //in cel mai rau caz

        int aux;
        int i = st, j = dr, schimb = 0;
        //schimb o sa ia val 1 sau 0
        //cand o sa ia val 1, i va fi incrementat
        //pt val 0, j va fi incrementat
        while (i < j)
        {
            if (v[i] > v[j])
            {
                aux = v[i];
                v[i] = v[j];
                v[j] = aux;
                schimb = 1 - schimb;
            }
            i += schimb;
            j = j - 1 + schimb;
        }
        //acum sortam si celelalte 2 parti
        quickSort(v, st, i - 1);
        quickSort(v, j + 1, dr);
    }
}

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
	{
		fin >> v[i];
	}
    quickSort(v,1,n);
	for (int i = 1; i <= n; i++)
	{
		fout << v[i]<<" ";
	}
	return 0;
}