Cod sursa(job #2296136)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 4 decembrie 2018 14:34:07
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb

//Sortarea prin QuickSort

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
int v[500001];
void QuickSort(int v[],int st, int dr)
{
	if(st>=dr)//daca st>=dr atunci iesim din program
    {
       return;
    }
	int i,j,pivot=v[rand()%(dr-st)+st];
	//alegem pivotul in mod aleator
    i=st;
    j=dr;
    while(i<=j)
    {
        while(v[i]<pivot) // daca v[i]<pivot il crestem pe i
        {
            i++; //facem acest lucru pana cand nu mai avem elemente mai mici la stanga pivotului
        }
        while(v[j]>pivot) //daca v[j]>pivot il scadem pe j
        {
            j--; //facem acest lucru pana cand nu mai avem elemente mai mari la dreapta pivotului
        }
        if(i<=j)
        {
            swap(v[i],v[j]);//schimbam elementel v[i] si v[j];
            i++; //incrementam i
            j--; //decrementam j
        }
    }
    //se reapeleaza quicksot
	QuickSort(v,st,j);//pentru prima jumatate
    QuickSort(v,i,dr);//pentru a doua jumatate
}
int main()
{
    srand(time(NULL));
    int N,i;
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin>>N;
    for(i=0;i<=N-1;i++)
    {
        fin>>v[i];
    }
    QuickSort(v,0,N-1);
    for(i=0;i<=N-1;i++)
    {
        fout<<v[i]<<" ";
    }
    return 0;
}