Pagini recente » Cod sursa (job #2681890) | Cod sursa (job #1670931) | Cod sursa (job #1990283) | Cod sursa (job #1954049) | Cod sursa (job #3211148)
#include <iostream>
#include <fstream>
#include <vector>
void Merge(int left, int mid, int right, std::vector<int>& v) {
std::vector<int>a, b;
for (int i = left; i <= mid; i++) {
a.push_back(v[i]);
}
for (int i = mid + 1; i <= right; i++) {
b.push_back(v[i]);
}
int i = 0, j = 0, n = a.size(), m = b.size(), k = left;
while (i < n && j < m) {
if (a[i] < b[j]) {
v[k++] = a[i++];
}
else {
v[k++] = b[j++];
}
}
while (i < n) v[k++] = a[i++];
while (j < m) v[k++] = b[j++];
}
void MergeSort(int left, int right, std::vector<int> &v) {
if (left >= right) {
return;
}
else {
int mid = (left + right) / 2;
MergeSort(left, mid, v);
MergeSort(mid + 1, right, v);
Merge(left, mid, right, v);
}
}
int Partition(int left, int right, std::vector<int>&v) {
int pivot = v[right], i = left - 1;
for (int j = left; j <= right; j++) {
if (v[j] < pivot) {
i++;
std::swap(v[i], v[j]);
}
}
++i;
std::swap(v[i], v[right]);
return i;
}
void QuickSort(int left, int right, std::vector<int>&v) {
if (left >= right) {
return;
}
int p = Partition(left, right, v);
QuickSort(left, p-1, v);
QuickSort(p + 1, right, v);
}
int main() {
std::ifstream fin("algosort.in");
std::ofstream fout("algsort.out");
int n, nr;
std::vector<int>v;
fin >> n;
for (int i = 0; i < n; i++) {
fin >> nr;
v.push_back(nr);
}
QuickSort(0, n - 1, v);
for (int i = 0; i < n; i++)
std::cout << v[i] << ' ';
return 0;
}