Pagini recente » Cod sursa (job #3132075) | Cod sursa (job #1237559) | Cod sursa (job #506355) | Borderou de evaluare (job #607580) | Cod sursa (job #2871405)
#include <fstream>
#include <vector>
using namespace std;
constexpr auto kMaxLen = 500'000;
int vec[kMaxLen];
int Partition(int left, int right) {
auto mid = left + (right - left) / 2;
swap(vec[left], vec[mid]);
auto i = left + 1;
auto j = right;
while (i <= j) {
while (i <= j && vec[i] <= vec[left]) {
i += 1;
}
while (i <= j && vec[j] > vec[left]) {
j -= 1;
}
if (i <= j) {
swap(vec[i], vec[j]);
i += 1;
j -= 1;
}
}
swap(vec[left], vec[i - 1]);
return i - 1;
}
void QuickSort(int left, int right) {
if (left >= right) {
return;
}
auto mid = Partition(left, right);
QuickSort(left, mid - 1);
QuickSort(mid + 1, right);
}
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin >> n;
for (int i = 0; i < n; i += 1) {
fin >> vec[i];
}
QuickSort(0, n - 1);
for (int i = 0; i < n; i += 1) {
fout << vec[i] << " ";
}
fout << "\n";
return 0;
}