Cod sursa(job #2210706)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 7 iunie 2018 18:40:59
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

vector<int> v;

int poz = 0;
#define DIM 10000
char buffer[DIM];

void cit(int &n){
  n = 0;
  while(buffer[poz] > '9' || buffer[poz] < '0'){
    if(++poz == DIM){
      fread(buffer, sizeof(char), DIM, stdin);
      poz = 0;
    }
  }

  while(buffer[poz] >= '0' && buffer[poz] <= '9'){
    n = n * 10 + buffer[poz] - '0';
    if(++poz == DIM){
      fread(buffer, sizeof(char), DIM, stdin);
      poz = 0;
    }
  }
  return;
}

int partitionn(int l, int r){
  int pivot = ( rand() * rand() ) % (r - l + 1) + l;
  swap(v[r], v[pivot]);

  int i = l;
  int j = l;
  int x = v[r];

  while(j != r){
    if(v[j] >= x){
      j++;
    }else{
      swap(v[j], v[i]);
      i++;
      j++;
    }
  }
  swap(v[i], v[r]);
  return i;
}

void quick_sort(int l, int r){
  if(l == r || l > r){
    return;
  }
  int q = partitionn(l, r);

  quick_sort(l, q - 1);
  quick_sort(q + 1, r);
}

void q_sort(){
  quick_sort(0, v.size() - 1);
}

int main()
{
  srand(time(NULL));
  freopen("algsort.in","r",stdin);
  freopen("algsort.out","w",stdout);

  int n, x;

  cit(n);
  for(int i = 0; i < n; ++i){
    cit(x);
    v.push_back(x);
  }
  q_sort();

  for(int i = 0; i < n; ++i){
    printf("%d ",v[i]);
  }
  return 0;
}