Pagini recente » Cod sursa (job #352236) | Cod sursa (job #165319) | Cod sursa (job #1493668) | Cod sursa (job #1853589) | Cod sursa (job #1741374)
#include <algorithm>
#include <string>
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <map>
using namespace std;
#ifdef INFOARENA
#define TEST 0
#else
#define TEST 1
#endif
class Sort {
public:
Sort(const vector<int>& nums) {
sorted_nums.resize(nums.size());
for (int i = 0; i < nums.size(); ++i) {
sorted_nums[i] = nums[i];
}
already_sorted = false;
}
void QuickSort(int left, int right) {
int middle = (left + right) / 2;
int pivot = sorted_nums[middle];
int i = left, j = right;
while (i < j) {
while (sorted_nums[i] < pivot) i++;
while (sorted_nums[j] > pivot) j--;
if (i <= j) {
swap(sorted_nums[i], sorted_nums[j]);
i++;
j--;
}
}
if (i < right) QuickSort(i, right);
if (j > left) QuickSort(left, j);
}
const vector<int>& GetSortedNums() {
if (!already_sorted) {
if (!sorted_nums.empty()) {
QuickSort(0, sorted_nums.size() - 1);
}
already_sorted = true;
}
return sorted_nums;
}
private:
vector<int> sorted_nums;
bool already_sorted;
};
int main() {
vector<int> nums;
if (TEST) {
nums = vector<int>({4,1,7,5,1,3});
} else {
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int nums_size;
scanf("%d", &nums_size);
nums.resize(nums_size);
for (int i = 0; i < nums_size; ++i) {
scanf("%d", &nums[i]);
}
}
Sort sort_instance(nums);
vector<int> sorted_nums = sort_instance.GetSortedNums();
for (int i = 0; i < sorted_nums.size(); ++i) {
printf("%d ", sorted_nums[i]);
}
return 0;
}