Pagini recente » Cod sursa (job #1803201) | Cod sursa (job #1949343) | Cod sursa (job #3135312) | Cod sursa (job #2438141) | Cod sursa (job #2341631)
#include <fstream>
#define NMAX 500000
using namespace std;
FILE *pInFile, *pOutFile;
int v[NMAX], pos = NMAX - 1, n;
char buff[NMAX];
void readInt(int &x) {
while (buff[pos] < '0' || buff[pos] > '9') {
if (++pos == NMAX) {
fread(buff, 1, NMAX, pInFile);
pos = 0;
}
}
while (buff[pos] >= '0' && buff[pos] <= '9') {
x = x * 10 + buff[pos] - '0';
if (++pos == NMAX) {
fread(buff, 1, NMAX, pInFile);
pos = 0;
}
}
}
int partition(int left, int right) {
pos = random() % (right - left + 1) + left;
int pivot = v[pos], i, j;
for (i = left, j = right;;) {
for (; v[i] < pivot; ++i);
for (; v[j] > pivot; --j);
if (i < j) {
swap(v[i++], v[j--]);
} else {
return j;
}
}
}
void quickSort(int left, int right) {
if (left >= right) {
return;
}
int mid = partition(left, right);
quickSort(left, mid);
quickSort(mid + 1, right);
}
int main() {
pInFile = fopen("algsort.in", "r");
pOutFile = fopen("algsort.out", "w");
readInt(n);
for (int i = 0; i < n; ++i) {
readInt(v[i]);
}
quickSort(0, n - 1);
for (int i = 0; i < n; ++i) {
fprintf(pOutFile, "%d ", v[i]);
}
fprintf(pOutFile, "\n");
fclose(pInFile);
fclose(pOutFile);
return 0;
}