Cod sursa(job #312441)

Utilizator vlad_DVlad Dumitriu vlad_D Data 6 mai 2009 05:37:45
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;

int v[500100];
int partitie(int a, int b) {
    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() {
    freopen("algsort.in", "r", stdin);
    freopen("algosort.out", "w", stdout);
   
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) scanf("%d", &v[i]);
    random_shuffle(v, v+n);    
    qsort(0, n-1);
    
    for (int i = 0; i < n; ++i) printf("%d ", v[i]);
    printf("\n");
    return 0;
    };