Pagini recente » Cod sursa (job #2954929) | Cod sursa (job #1003494) | Cod sursa (job #2177058) | Cod sursa (job #124149) | Cod sursa (job #2615960)
#include <stdio.h>
#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int INF = 0x3f3f3f3f;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
const int Nmax = 500555;
int a[Nmax];
// insertion sort
inline void isort(int l, int r) {
int x, j;
for(int i = l; i <= r; i++) {
x = a[i];
for(j = i; j > l && a[j-1] > x; j--) { a[j] = a[j-1]; }
a[j] = x;
}
}
void mqsort(int l, int r) {
// cout << string(40, '-') << l << "-" << r << string(40, '-') << endl;
if (l>=r) { return; }
else if (l + 1 == r) {
if (a[l] > a[r]) { swap(a[l], a[r]); }
return;
}
// if (l+5 >= r) {
// isort(v, l, r);
// return;
// }
int m = rand() % (r-l+1);
int pivot = a[m];
// if (a[l] > a[m]) { swap(a[l], a[m]); }
// if (a[m] > a[r]) { swap(a[m], a[r]); }
// if (a[l] > a[m]) { swap(a[l], a[m]); }
int i = l, j = r;
while(i < j) {
while(i < j && a[i] < pivot) { i++; }
while(j > i && a[j] > pivot) { j--; }
if (i < j) {
swap(a[i], a[j]);
i++;
j--;
}
}
// i == j
if (a[i] < pivot) {
mqsort(l, i);
mqsort(i+1, r);
} else {
mqsort(l, i-1);
mqsort(i, r);
}
}
int main(void) {
// freopen("algsort.in", "r", stdin);
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n;
fin >> n;
// vi v(n);
rep(i, n) {
fin >> a[i];
}
// isort(v, 0, n-1);
mqsort(0, n-1);
// sort(v.begin(), v.end());
rep(i, n) {
fout << a[i] << " ";
}
fout << "\n";
// mqsort(v, 0, n-1);
return 0;
}