Cod sursa(job #765747)

Utilizator mi5humihai draghici mi5hu Data 9 iulie 2012 10:16:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <fstream>
#include <cstdlib>
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 printf_v() {
     for (int i = 0; i < n; i++) {
         printf("%d ", v[i]);
     }
     printf("\n");     
}

void qSort_(int a, int b) {
     if (a >= b) {
        return;
     }
                  
     int p = pivot(a, b);
     
     sw(&v[b], &v[p]);
     int piv = v[b];
          
     int left = a - 1 ;
     int right = b;
     
     while (left < right) {
        while (left < right && v[++left] < piv) {
        }
        while (left < right && v[--right] > piv) {
        }
        sw(&v[left], &v[right]);            
     }
     
     sw(&v[b], &v[left]);
     
     qSort_(a, left - 1);
     qSort_(left + 1, b); 
     
}

void print_() {
     for (int i = 0; i < n; i++) {
         printf("%d ", v[i]); 
     }   
}
     
int main() {
    read_();
    freopen("algsort.out", "w", stdout);
    qSort_(0, n-1);
    print_();
    
    return 0;
}