Pagini recente » Statistici Baczur Richard (richardb19) | Cod sursa (job #1707884) | Borderou de evaluare (job #1711767) | Cod sursa (job #172091) | Cod sursa (job #1702206)
#include <fstream>
#include <vector>
using namespace std;
const int nmax = 500001;
int temp[nmax];
void merge(vector<int>& v, int left, int mid, int right)
{
int i = left, j = mid + 1;
int k = left;
while(i <= mid && j <= right)
{
if(v[i] <= v[j])
{
temp[k] = v[i];
++i;
}
else
{
temp[k] = v[j];
++j;
}
++k;
}
while(i <= mid)
{
temp[k] = v[i];
++i, ++k;
}
while(j <= right)
{
temp[j] = v[j];
++j, ++k;
}
for(int i = left;i <= right;++i)
{
v[i] = temp[i];
}
}
void m_sort(vector<int>& v, int left, int right)
{
if(left >= right)
{
return;
}
int mid = left + (right - left) / 2;
m_sort(v, left, mid);
m_sort(v, mid + 1, right);
merge(v, left, mid, right);
}
void merge_sort(vector<int>& v)
{
int N = v.size();
m_sort(v, 0, N - 1);
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
int N;
in >> N;
vector<int> v;
for(int i = 0;i < N;++i)
{
int nr;
in >> nr;
v.push_back(nr);
}
merge_sort(v);
for(int i = 0;i < N - 1;++i)
{
out<<v[i]<<" ";
}
out<<v[N - 1];
out<<"\n";
in.close();
out.close();
}