Cod sursa(job #720952)

Utilizator PetcuIoanPetcu Ioan Vlad PetcuIoan Data 23 martie 2012 08:34:46
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
#include<assert.h>

#include<algorithm>
#include<vector>

using namespace std;

const int knmax = 500005;
int elem, given[knmax];

void read(){
  assert(freopen("algsort.in", "r", stdin) != NULL);

  scanf("%d", &elem);
  for(int i = 1; i <= elem; ++i)
    scanf("%d", &given[i]);
}

void qu_sort(int left, int right){
  if(left == right || left > right)
    return;

  if(right - left == 1){
    if(given[left] > given[right])
      swap(given[left], given[right]);

    return;
  }

  int aux = given[(left + right) / 2], i, j;
  for(i = left, j = right; i <= j; ++i)
    while(given[i] > aux && j > i){
      swap(given[i], given[j]);
      --j;
    }

  qu_sort(left, i - 1);
  qu_sort(i, right);
}

void solve(){
  //random_shuffle(given + 1, given + elem + 1);
  sort(given + 1, given + elem + 1);
  //qu_sort(1, elem);
}

void write(){
  assert(freopen("algsort.out", "w", stdout) != NULL);

  for(int i = 1; i <= elem; ++i)
    printf("%d ", given[i]);
}

int main(){
  read();
  solve();
  write();
  return 0;
}