Cod sursa(job #997604)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 14 septembrie 2013 17:19:07
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

int parts(int *A, int l, int r, int k)
{
    int index = l;
    swap(A[k], A[r]);
    for(int i = l; i < r; i++)
        if(A[i] < A[r])
        {
            swap(A[i], A[index]);
            index++;
        }
    swap(A[index], A[r]);
    return index;
}

void quiksort(int *A, int left, int right)
{
    if(left >= right) return;
    int pi = left + rand() % (right - left);
    int npi = parts(A, left, right, pi);
    quiksort(A, left, npi - 1);
    quiksort(A,npi + 1, right);
}

int main(void)
{
    std::ofstream out("algsort.out");
    std::ifstream in("algsort.in");
    int nV, *nArr;
    srand(time(NULL));
    in >> nV;
    nArr = new int[nV];
    for(int i(0); i < nV; i++)
        in >> nArr[i];
    quiksort(nArr, 0, nV - 1);
    for(int i(0); i < nV; i++)
        out << nArr[i] << ' ';
    return 0;
}