Cod sursa(job #1712583)

Utilizator contnouAndrei Pavel contnou Data 3 iunie 2016 04:51:06
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<time.h>

#define MAXN 500005
 
using namespace std;
 
void swap(int* A, int i, int j) {
    int aux = A[i];
    A[i] = A[j];
    A[j] = aux;
}
 
int partition(int* A, int left, int right) {
    int pivotPos = rand() % (right - left + 1);
    swap(A, left, left + pivotPos);
 
    int pos = left;
    for (int i = left + 1; i <= right; i++) {
        if (A[i] <= A[left]) {
            pos++;
            swap(A, i, pos);
        }
    }
 
    swap(A, left, pos);
    return pos;
}
 
void qsort(int* A, int size, int left, int right) {
    if (left < right) {
        int pos = partition(A, left, right);
        qsort(A, size, left, pos - 1);
        qsort(A, size, pos + 1, right);
    }
}
 
 
int main() {
    int n;
    int A[MAXN];
 
	srand(time(0));
    ifstream f("algsort.in");
    ofstream g("algsort.out");
 
    f >> n;
    for (int i = 1; i <= n; i++) {
        f >> A[i];
    }
 
    qsort(A, n, 1, n);
 
    for (int i = 1; i <= n; i++) {
        g << A[i] << " ";
    }
 
    g << endl; 
 
    return 0;
}