Cod sursa(job #765731)

Utilizator mi5humihai draghici mi5hu Data 9 iulie 2012 09:18:06
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <stdio.h>
#include <fstream>
using namespace std;

int v[500001];
int n;

void read_() {
     ifstream in("algsort.in");
     in >> n;
     for (int i = 0; i < n; i++) {
         in >> v[i];
     }
     in.close();
}

void sw(int* a, int* b) {
     int aux = *a; 
     *a = *b;
     *b = aux;     
}

int pivot(int a, int b) {
    return a + rand() % (b - a);
}

void qSort_(int a, int b) {
     if (a >= b) {
        return;
     }
         
     int p = pivot(a, b);
     sw(&v[a], &v[p]);
     int piv = v[a];
     
     int left = a + 1;
     int right = b;
     
     while (left <= right) {
        while (left <= b && v[left] <= piv) {
           left++;      
        }
        while (right >= a && v[right] > piv) {
           right--;
        }
        if (left < right) {
           sw(&v[left], &v[right]);            
        }
     }
     
     sw(&v[a], &v[right]);
     
     qSort_(a, right - 1);
     qSort_(right + 1, b); 
     
}
     
void print_() {
     ofstream out("algsort.out");
     for (int i = 0; i < n; i++) {
         out << v[i] << " ";
     }     
     out.close();
}
     
int main() {
    read_();
    qSort_(0, n-1);
    print_();
    
    return 0;
}