Pagini recente » Cod sursa (job #143289) | Cod sursa (job #3237079) | Statisticile problemei Football | Cod sursa (job #3230848) | Cod sursa (job #3287053)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void merge(vector<int> &nums, int l, int r) {
int mean = (l + r) / 2;
int n1 = mean - l + 1;
int n2 = r - mean;
vector<int>left(n1);
vector<int>right(n2);
for (int i = l; i <= mean; i++)
left[i - l] = nums[i];
for (int i = mean + 1; i <= r; i++)
right[i - mean - 1] = nums[i];
int i = 0;
int j = 0;
int indx = l;
while ((i < n1) && (j < n2)) {
if (left[i] <= right[j])
nums[indx++] = left[i++];
else
nums[indx++] = right[j++];
}
while (i < n1)
nums[indx++] = left[i++];
while (j < n2)
nums[indx++] = right[j++];
}
void divide(vector<int> &nums, int l, int r) {
if (l == r)
return;
int mean = (l + r) / 2;
divide(nums, l, mean);
divide(nums, mean + 1, r);
merge(nums, l, r);
}
void merge_sort(int n, vector<int> &nums) {
divide(nums, 0, n - 1);
}
int main() {
int n;
vector<int> nums;
ifstream fin("algsort.in");
fin >> n;
for (int i = 0; i < n; i++) {
int num = 0;
fin >> num;
nums.push_back(num);
}
fin.close();
merge_sort(n, nums);
ofstream fout("algsort.out");
for (int i = 0; i < n; i++)
fout << nums[i] << " ";
fout.close();
return 0;
}