Pagini recente » Cod sursa (job #1406909) | Cod sursa (job #3176981) | Cod sursa (job #2345710) | Cod sursa (job #1603281) | Cod sursa (job #2900156)
#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 = rand()%(dr - st) + st;
int pivot = vec[index];
cout << st << " " << dr << " " << index << " " << pivot << "\n";
for (int i=0; i<dr; i++) {
cout << vec[i] << " ";
}
cout << "\n";
swap(vec[index], vec[dr-1]);
int i = st;
for (int j=st; j<dr; j++) {
if (vec[j] < pivot) {
swap(vec[i], vec[j]);
i++;
}
}
swap(vec[i], vec[dr-1]);
for (int i=0; i<dr; i++) {
cout << vec[i] << " ";
}
cout << "\n\n\n";
return index;
}
void QuickSort(int *vec, int st, int dr){
if (st < dr) {
int index = Partition(vec, st, dr);
QuickSort(vec, st, index);
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);
for (int i=0; i<n; i++) {
out << vec[i] << " ";
}
return 0;
}