Cod sursa(job #2061723)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 9 noiembrie 2017 17:31:27
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

const int Nmax = 500005;

int n,elements[Nmax];

int orderElementsAccordingToRandElement(int leftIndex, int rightIndex, int fixedValue)
{
    int leftPointer = leftIndex, rightPointer = rightIndex;
    while(true)
    {
        while(elements[leftPointer] < fixedValue)
            ++leftPointer;
        while(elements[rightPointer] > fixedValue)
            --rightPointer;
        if(leftPointer < rightPointer)
            swap(elements[leftPointer++], elements[rightPointer--]);
        else
            return leftPointer;
    }
}

void quickSort(int leftIndex, int rightIndex)
{
    if(leftIndex >= rightIndex)
        return;

    int randElement = elements[leftIndex + rand() % (rightIndex - leftIndex + 1)];
    int finalElementPosition = orderElementsAccordingToRandElement(leftIndex, rightIndex, randElement);

    //cout << randElement << " " << finalElementPosition << "\n";

    quickSort(leftIndex, finalElementPosition - 1);
    quickSort(finalElementPosition, rightIndex);
}

int main()
{
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
    cin >> n;
    for(int i=1; i<=n; ++i)
        cin >> elements[i];

    srand(time(0));
    quickSort(1,n);

    for(int i=1; i<=n; ++i)
        cout << elements[i] << " ";
    cout << "\n";

    return 0;
}