Cod sursa(job #312438)

Utilizator vlad_DVlad Dumitriu vlad_D Data 6 mai 2009 05:30:56
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

int v[500100];
int partitie(int a, int b) {
    int rad = rand() % (b - a + 1);
    swap(v[a], v[a+rad]);
    int pivot = v[a];
    int left = a + 1, right = b;
    while (1) {
          while (left < b && v[left] <= pivot) ++left;
          while (right > a && v[right] >= pivot) --right;
          if (left < right) swap(v[left], v[right]);
          else break;
          }
    swap(v[a], v[right]);
    return right;
    }
void qsort(int a, int b) {
     if (a >= b) return; //done
     int pivot = partitie(a, b);
     qsort(a, pivot - 1);
     qsort(pivot + 1, b);
     }
int main() {
    ifstream fin("algsort.in");    
    ofstream fout("algsort.out");
    
    int n;
    fin >> n;
    for (int i = 0; i < n; ++i) fin >> v[i];
    
    qsort(0, n-1);
    
    for (int i = 0; i < n; ++i) fout << v[i] << ' ';
    fout << '\n';
    return 0;
    };