Pagini recente » Cod sursa (job #13246) | Cod sursa (job #707942) | Cod sursa (job #2899646) | Cod sursa (job #523418) | Cod sursa (job #1521333)
#include <iostream>
#include <cstdio>
#include <vector>
std::vector<int> vec;
void mergeSort(int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
mergeSort(left, mid);
mergeSort(mid + 1, right);
std::vector<int> temp;
int i = left;
int j = mid + 1;
while (true) {
if (i <= mid && (j > right || vec[i] < vec[j])) {
temp.push_back(vec[i++]);
continue;
}
if (j > right && i > mid) {
break;
}
temp.push_back(vec[j++]);
}
for (i = left; i <= right; ++i) {
vec[i] = temp[i - left];
}
}
void insertionSort() {
for (int i = 0; i < vec.size(); ++i) {
for (int j = i; j > 0 && vec[j] < vec[j - 1]; --j) {
int temp = vec[j];
vec[j] = vec[j - 1];
vec[j - 1] = temp;
}
}
}
void heapSort() {
int n = vec.size();
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j / 2 != 0 && vec[j - 1] > vec[j / 2 - 1]; j /= 2) {
int temp = vec[j - 1];
vec[j - 1] = vec[j / 2 - 1];
vec[j / 2 - 1] = temp;
}
}
for (int i = 0; i < n; ++i) {
int temp = vec[n - i - 1];
vec[n - i - 1] = vec[0];
vec[0] = temp;
for (int j = 1; ;) {
bool left = false;
bool right = false;
if (j * 2 - 1 < n - i - 1 && vec[j - 1] < vec[j * 2 - 1]) {
left = true;
}
if (j * 2 < n - i - 1 && vec[j * 2] > vec[j * 2 - 1] && vec[j - 1] < vec[j * 2]) {
right = true;
}
if (!left && !right) {
break;
}
int toChange = right ? j * 2 : j * 2 - 1;
int temp = vec[toChange];
vec[toChange] = vec[j - 1];
vec[j - 1] = temp;
j = toChange + 1;
}
}
}
void quickSort(int left, int right) {
if (left >= right) {
return;
}
int piv = vec[right];
int i = left;
for (int j = left; j < right; ++j) {
if (vec[j] < piv) {
int temp = vec[j];
vec[j] = vec[i];
vec[i] = temp;
++i;
}
}
int temp = vec[i];
vec[i] = vec[right];
vec[right] = temp;
quickSort(left, i - 1);
quickSort(i + 1, right);
}
int main() {
FILE *f = fopen("algsort.in", "r");
FILE *g = fopen("algsort.out", "w");
int n;
fscanf(f, "%d", &n);
for (int i = 0; i < n; ++i) {
int nr;
fscanf(f, "%d", &nr);
vec.push_back(nr);
}
// mergeSort(0, vec.size() - 1);
// insertionSort();
// heapSort();
quickSort(0, vec.size() - 1);
for (int i = 0; i < n; ++i) {
fprintf(g, "%d ", vec[i]);
}
fprintf(g, "\n");
fclose(f);
fclose(g);
return 0;
}