Pagini recente » Cod sursa (job #3252341) | Cod sursa (job #242361) | Cod sursa (job #1780988) | Cod sursa (job #1831255) | Cod sursa (job #3156187)
#include <fstream>
#include <vector>
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
int n;
void merge(int left, int mid, int right, std::vector<int>& arr){
std::vector<int> arr1, arr2, narr;
for(int i = left; i <= mid; i++)
arr1.push_back(arr[i]);
for(int i = mid + 1; i <= right; i++)
arr2.push_back(arr[i]);
if(!arr1.size() || !arr2.size())
return;
int i = 0, j = 0;
while(i < arr1.size() && j < arr2.size()){
if(arr1[i] < arr2[j]) {
narr.push_back(arr1[i]);
i ++;
}
else {
narr.push_back(arr2[j]);
j ++;
}
}
while(i < arr1.size()){
narr.push_back(arr1[i]);
i++;
}
while(j < arr2.size()){
narr.push_back(arr2[j]);
j ++;
}
for(int i = left; i <= right; i++){
arr[i] = narr[i - left];
}
}
void mergeSort(int left, int right, std::vector<int>& arr){
if(left >= right)
return;
int mid = left + (right - left) / 2;
mergeSort(left, mid, arr);
mergeSort(mid + 1, right, arr);
merge(left, mid, right, arr);
}
int main(){
fin >> n;
std::vector<int> arr(n + 1, 0);
for(int i = 1; i <= n; i++){
fin >> arr[i];
}
mergeSort(1, n, arr);
for(int i = 1; i <= n; i++)
fout << arr[i] << " ";
}