Cod sursa(job #2233170)

Utilizator Stefan_RaduStefan Radu Stefan_Radu Data 22 august 2018 14:23:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream cin ("algsort.in");
ofstream cout ("algsort.out");

void Merge (int a, int b, int c, vector < int > &v) {

  vector < int > aux (c - a + 2);

  int ind = 0;

  int i = a, j = b + 1;
  while (i <= b and j <= c) {

    if (v[i] < v[j]) {
      aux[++ ind] = v[i ++];
    }
    else {
      aux[++ ind] = v[j ++];
    }
  }

  while (i <= b) {
    aux[++ ind] = v[i ++];
  }

  while (j <= c) {
    aux[++ ind] = v[j ++];
  }

  for (int i = 1; i <= ind; ++ i) {
    v[a + i - 1] = aux[i];
  }
}

void MergeSort (int st, int dr, vector < int > &v) {

  if (st == dr) {
    return;
  }

  int mid = (st + dr) >> 1;

  MergeSort (st, mid, v);
  MergeSort (mid + 1, dr, v);

  Merge (st, mid, dr, v);
}

void RadixSort (int n, vector < int > &v) {

  int base = 1 << 8;
  vector < vector < int > > buckets (base);

  for (int i = 0; i < 4; ++ i) {

    for (auto &x : buckets) {
      x.clear ();
    }

    int diviz = 1 << (i * 8);

    for (int i = 1; i <= n; ++ i) {
      buckets[(v[i] / diviz) % base].push_back (v[i]);
    }
    
    int ind = 0;
    for (auto &x : buckets) {
      for (auto y : x) {
        v[++ ind] = y;
      }
    }
  }
}

int main () {

  int n;
  cin >> n;

  vector < int > v (n + 1);
  for (int i = 1; i <= n; ++ i) {
    cin >> v[i];
  }

  // ==============================================//

  sort (v.begin () + 1, v.end ());

  //=============================================//

  /* MergeSort (1, n, v); */

  //=============================================//

  /* RadixSort (n, v); */

  //=============================================//

  for (int i = 1; i <= n; ++ i) {
    cout << v[i] << ' ';
  }
  cout << '\n';

}