Cod sursa(job #1990599)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 12 iunie 2017 18:14:37
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

int part(int *myV, int left, int right, int pivot) {
    int val = myV[pivot];
    std::swap(myV[pivot], myV[right]);
    int ind = left;

    for (int i(left); i < right; i++) {
        if (myV[i] < val) {
            std::swap(myV[i], myV[ind]);
            ind++;
        }
    }

    std::swap(myV[right], myV[ind]);
    return ind;
}

void quicksort(int *myV, int left, int right) {
    if (left >= right) {
        return;
    }

    int pivot = left + (rand() % (left - right));
    int pos = part(myV, left, right, pivot);

    quicksort(myV, left, pos - 1);
    quicksort(myV, pos + 1, right);
}

int main() {
    std::ifstream fileIn("algsort.in");
    std::ofstream fileOut("algsort.out");
    srand(time(nullptr));

    int nV;

    fileIn >> nV;

    int *myV = new int[nV];

    for (int i(0); i < nV; i++) {
        fileIn >> myV[i];
    }

    quicksort(myV, 0, nV - 1);

    for (int i(0); i < nV; i++) {
        fileOut << myV[i] << ' ';
    }

    delete[] myV;
    fileIn.close();
    fileOut.close();

    return 0;
}