Pagini recente » Cod sursa (job #1016476) | Cod sursa (job #1615743) | Cod sursa (job #2262646) | Cod sursa (job #2954145) | Cod sursa (job #1156468)
#include <fstream>
#include <vector>
using namespace std;
int n;
vector<int> v;
void merge(int left, int m, int right, vector<int> empty){
int i = left, j = m+1;
while((i <= m) && (j <= right)){
if(v.at(i) < v.at(j)){
empty.push_back(v.at(i++));
}
if(v.at(i) >= v.at(j)){
empty.push_back(v.at(j++));
}
}
if(i > m){
while(j <= right){
empty.push_back(v.at(j++));
}
}
if(j > right){
while(i <= m){
empty.push_back(v.at(i++));
}
}
for(int i = left; i <= right; i++){
v[i] = empty[i-left];
}
}
void mergeSort(int left, int right, vector<int> empty){
int m = left + (right - left)/2;
if(left < right){
mergeSort(left, m, empty);
mergeSort(m+1, right, empty);
merge(left, m, right, empty);
}
}
int main(){
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int elem;
fin >> n;
vector<int> empty;
for(int i = 0 ; i < n; i++){
fin >> elem;
v.push_back(elem);
}
mergeSort(0,n-1, empty);
for(int i = 0; i < n; i++){
fout << v.at(i) <<" ";
}
fout << "\n";
return 0;
}