Pagini recente » Cod sursa (job #1909118) | Cod sursa (job #1948492) | Cod sursa (job #2493917) | Cod sursa (job #1562610) | Cod sursa (job #1893872)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int n, v[500005],w[500005];
void quick_sort(int st, int dr)
{
if (st >= dr)
return;
if (dr - st == 1)
{
if (v[st] > v[dr])
swap(v[st], v[dr]);
return;
}
int pivot=rand() % (dr - st + 1) + st;
int median = v[pivot],l=st,r=dr;
for (int i = st;i <= dr;i++)
{
if (i == pivot)
continue;
if (v[i] < median)
w[l++] = v[i];
if (v[i] >= median)
w[r--] = v[i];
}
w[l] = median;
for (int i = st;i <= dr;i++)
v[i] = w[i];
quick_sort(st, l - 1);
quick_sort(l + 1, dr);
/*while (l <= r)
{
while (v[l] < median)
l++;
while (v[r] > median)
r--;
if (l <= r)
{
swap(v[l], v[r]);
l++;
r--;
}
}
quick_sort(st, l - 1);
quick_sort(l, dr);
*/
}
int main()
{
srand(time(0));
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> n;
for (int i = 1;i <= n;i++)
f >> v[i];
f.close();
quick_sort(1,n);
//for(int i=1;i<=n;i++)
// for(int j=i+1;j<=n;j++)
// if (v[i] > v[j])
// {
// swap(v[i], v[j]);
// }
//sort(v+1, v+n+1);
for (int i = 1;i <= n;i++)
g << v[i] << " ";
g << "\n";
g.close();
return 0;
}