Pagini recente » Cod sursa (job #1357952) | Cod sursa (job #1677369) | Cod sursa (job #259057) | Cod sursa (job #2468270) | Cod sursa (job #2900176)
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int dim = 500005;
int vec[dim];
int n;
void MergeSort(int *vec, int n) {
if (n <= 1) return;
int *vec1, *vec2;
vec1 = vec;
int a_n = n/2;
vec2 = vec + n/2;
int b_n = n - n/2;
MergeSort(vec1, a_n);
MergeSort(vec2, b_n);
int i = 0;
int j = 0;
vector<int> newvec;
while (i < a_n && j < b_n) {
if (vec1[i] <= vec2[j]) {
newvec.push_back(vec1[i++]);
} else {
newvec.push_back(vec2[j++]);
}
}
while (i < a_n) {
newvec.push_back(vec1[i++]);
}
while (j < b_n) {
newvec.push_back(vec2[j++]);
}
int cnt = 0;
for (auto &y:newvec) {
vec[cnt++] = y;
}
}
int Partition(int *vec, int st, int dr) {
int index = st + rand() % (dr - st + 1);
swap(vec[dr], vec[index]);
int pivot = dr;
int k = st;
for (int i = st; i <= dr; i++) {
if (vec[i] < vec[pivot]) {
swap(vec[i], vec[k]);
k++;
}
}
swap(vec[k], vec[pivot]);
return k;
}
void QuickSort(int *vec, int st, int dr){
if (st < dr) {
int index = Partition(vec, st, dr);
QuickSort(vec, st, index-1);
QuickSort(vec, index+1, dr);
}
}
int main()
{
srand(time(NULL));
in >> n;
for (int i=0; i<n; i++) {
in >> vec[i];
}
QuickSort(vec, 0, n-1);
for (int i=0; i<n; i++) {
out << vec[i] << " ";
}
return 0;
}