Pagini recente » Cod sursa (job #2446551) | Cod sursa (job #1416139) | Cod sursa (job #1911309) | Cod sursa (job #2984234) | Cod sursa (job #2231048)
#include <fstream>
#include <vector>
#define nmax 500000
using namespace std;
vector<int> v;
void merge_halves(int left,int right)
{
vector<int>aux;
int mid=(left+right)/2;
int i=left,j=mid+1;
while (i<=mid && j<=right) {
if (v[i]<=v[j]) {
aux.push_back(v[i]);
i++;
}
else {
aux.push_back(v[j]);
j++;
}
}
while (i<=mid) {
aux.push_back(v[i]);
i++;
}
while (j<=right) {
aux.push_back(v[j]);
j++;
}
for (int k=left;k<=right;k++) {
v[k]=aux[k-left];
}
}
void merge_sort(int left,int right) {
if (left>=right) return;
int mid=(left+right)/2;
merge_sort(left,mid);
merge_sort(mid+1,right);
merge_halves(left,right);
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin>>n;
for(int i=0;i<n;i++) {
int a;
fin>>a;
v.push_back(a);
}
merge_sort(0,v.size()-1);
for(int i=0;i<n;i++)
fout<<v[i]<<" ";
fin.close();
fout.close();
return 0;
}