Cod sursa(job #1021151)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 3 noiembrie 2013 12:58:34
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
using namespace std;

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

vector<int> merge (vector<int>& v1, vector<int>& v2)
{
  vector<int> ret;

  vector<int>::iterator i1, i2;

  i1 = v1.begin();
  i2 = v2.begin();
  while (i1 != v1.end() && i2 != v2.end())
    {
      if (*i1 < *i2)
	{
	  ret.push_back(*i1);
	  ++i1;
	}
      else
	{
	  ret.push_back(*i2);
	  ++i2;
	}
    }

  while (i1 != v1.end())
    {
      ret.push_back(*i1);
      ++i1;
    }

  while (i2 != v2.end())
    {
      ret.push_back(*i2);
      ++i2;
    }

  return ret;
}

vector<int> mergeSort (vector<int>& v)
{
  if (v.size() == 1)
    return v;

  vector<int>::iterator m = v.begin() + (v.size() / 2);
  
  vector<int> left  = vector<int> (v.begin(), m);
  vector<int> right = vector<int> (m, v.end());

  vector<int> sortedLeft  = mergeSort (left);
  vector<int> sortedRight = mergeSort (right);

  return merge(sortedLeft, sortedRight);
}

int main()
{
  int n; cin >> n;

  vector<int> v(n);
  for (int i = 0; i < n; i++)
    {
      int x; cin >> x;
      v.push_back(x);
    }

  v = mergeSort(v);

  for (int i = 0; i < n; i++)
    cout << v[i] << " ";
}