Pagini recente » Cod sursa (job #843866) | Cod sursa (job #2774717) | Cod sursa (job #2803819) | Cod sursa (job #2341643) | Cod sursa (job #2272341)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("algsort.in");
ofstream cout ("algsort.out");
const int MAX = static_cast<const int>(5e5 + 14);
int v [MAX];
int getPivot (int st, int dr)
{
random_shuffle (v + st, v + dr + 1);
int fi = st;
int target = v [fi];
st ++;
while (1)
{
while (st <= dr and v[st] <= target)
st += 1;
while (dr >= st and v[dr] >= target)
dr -= 1;
if (st <= dr)
{
swap (v[st], v [dr]);
}
else break;
}
swap(v [fi], v [dr]);
return dr;
}
void quickSort (int st, int dr)
{
if (st >= dr)
return;
auto pi = getPivot (st, dr);
/*cout << "st : " << st << " dr : " << dr << '\n';
for (int i = st; i <= dr; ++ i)
cout << v [i] << ' ';
cout << '\n';*/
quickSort(st, pi - 1);
quickSort(pi + 1, dr);
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; ++ i)
cin >> v [i];
quickSort(1, n);
for (int i = 1; i <= n; ++ i)
cout << v [i] << ' ';
cout << '\n';
return 0;
}