Pagini recente » Cod sursa (job #1755522) | Cod sursa (job #1935647) | Cod sursa (job #3241741) | Cod sursa (job #3125510) | Cod sursa (job #2340635)
#include <fstream>
#include <cstdlib>
#include <ctime>
#define input "algsort.in"
#define output "algsort.out"
#define NMAX 500005
using namespace std;
ifstream in(input);
ofstream out(output);
int arr[NMAX], N;
void Swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
void Read_Data()
{
in >> N;
for (int i = 1; i <= N; i++)
in >> arr[i];
}
int Partition(int st, int dr)
{
int pivot = arr[st];
st--, dr++;
while (true)
{
do
{
st++;
} while (arr[st] < pivot);
do
{
dr--;
} while (arr[dr] > pivot);
if (st >= dr) return dr;
Swap(arr[st], arr[dr]);
}
}
int Rand_Partition(int st, int dr)
{
int r_pivot = st + rand() % (dr - st);
Swap(arr[r_pivot], arr[st]);
return Partition(st, dr);
}
void Quick_Sort(int st, int dr)
{
if (st >= dr) return;
{
int mid = Rand_Partition(st, dr);
Quick_Sort(st, mid);
Quick_Sort(mid + 1, dr);
}
}
void Print_Sol()
{
for (int i = 1; i <= N; i++)
out << arr[i] << " ";
}
int main()
{
srand(time(NULL));
Read_Data();
Quick_Sort(1, N);
Print_Sol();
return 0;
}