Pagini recente » Cod sursa (job #24454) | Cod sursa (job #2555978) | Cod sursa (job #1910510) | Cod sursa (job #2762294) | Cod sursa (job #2204191)
#include <fstream>
#include <vector>
using namespace std;
int partition(vector<int> *v, int left, int right)
{
int mid = (left + right) / 2;
if ((*v)[mid] < (*v)[right]) {
if ((*v)[left] < (*v)[mid]) {
swap((*v)[mid], (*v)[right]);
}
else if((*v)[left] < (*v)[right]) {
swap((*v)[left], (*v)[right]);
}
}
else {
if ((*v)[mid] < (*v)[left]) {
swap((*v)[mid], (*v)[right]);
}
else if((*v)[right] < (*v)[left]) {
swap((*v)[left], (*v)[right]);
}
}
int pivot = (*v)[right];
int i = left - 1;
for (int j = left; j < right; ++j) {
if ((*v)[j] < pivot) {
++i;
swap((*v)[i], (*v)[j]);
}
}
++i;
swap((*v)[i], (*v)[right]);
return i;
}
void quickSort(vector<int> *v, int left, int right)
{
if (left >= right) {
return;
}
int pivotPos = partition(v, left, right);
quickSort(v, left, pivotPos - 1);
quickSort(v, pivotPos + 1, right);
}
int main()
{
ifstream fin("algsort.in");
int n;
fin >> n;
vector<int> v(n);
for (int i = 0; i < v.size(); ++i) {
fin >> v[i];
}
fin.close();
quickSort(&v, 0, n - 1);
ofstream fout("algsort.out");
for (int i = 0; i < v.size(); ++i) {
fout << v[i] << " ";
}
fout << "\n";
fout.close();
return 0;
}