Pagini recente » Cod sursa (job #2215936) | Cod sursa (job #1704636) | Cod sursa (job #824678) | Cod sursa (job #3000984) | Cod sursa (job #1048588)
#include <fstream>
#include <time.h>
#include <cstdlib>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
#define MAXN 500005
int N, K, v[MAXN];
void Swap(int a, int b)
{
int aux = v[a];
v[a] = v[b];
v[b] = aux;
}
int HoarePartition(int left, int right) {
int pivot = v[left],
i = left - 1,
j = right + 1;
while (1) {
do { --j; } while (v[j] > pivot);
do { ++i; } while (v[i] < pivot);
if (i < j) Swap(i, j);
else return j;
}
}
int RandomHoarePartition(int left, int right) {
int ran = (rand() % (right - left)) + left + 1;
Swap(ran, left);
return HoarePartition(left, right);
}
int QSort(int left, int right) {
if (left == right) return v[left];
int pivot = RandomHoarePartition(left, right);
if (left <= pivot) QSort(left, pivot);
if (pivot < right) QSort(pivot + 1, right);
}
int main()
{
srand(time(NULL));
f >> N;
for (int i = 1; i <= N; ++i)
f >> v[i];
QSort(1, N);
for (int i = 1; i <= N; ++i)
g << v[i] << ' ';
return 0;
}