Pagini recente » Cod sursa (job #493665) | Cod sursa (job #1166583) | Cod sursa (job #2228910) | Cod sursa (job #1334393) | Cod sursa (job #1273689)
/// Craciun Catalin
/// Algsort
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMax 500005
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int C[NMax];
int B[NMax];
void quicksort(int inf,int sup)
{
int x,i,j,t;
i=inf;
j=sup;
x=C[(i+j)/2];
do {
while ((i<sup)&&(C[i]<x)) i++;
while ((j>inf)&&(C[j]>x)) j--;
if (i<=j) {
t=C[i];
C[i]=C[j];
C[j]=t;
i++;
j--;
}
} while (i<=j);
if (inf<j) quicksort(inf,j);
if (i<sup) quicksort(i,sup);
}
void mergeS(int left, int right) {
int index = 1;
int indexLeft = left;
int indexRight = (left+right)/2+1;
while (indexLeft <= (left+right)/2 && indexRight <= right) {
if (C[indexLeft] < C[indexRight]) {
B[index] = C[indexLeft];
indexLeft++;
index++;
} else {
B[index] = C[indexRight];
indexRight++;
index++;
}
}
while (indexLeft <= (left+right)/2) {
B[index] = C[indexLeft];
indexLeft++;
index++;
}
while (indexRight <= right) {
B[index] = C[indexRight];
indexRight++;
index++;
}
int pos = 1;
for (int i=left;i<=right;i++, pos++) {
C[i] = B[pos];
}
}
void divide(int left, int right) {
if (left < right) {
int mij = (left + right)/2;
divide(left, mij);
divide(mij+1, right);
mergeS(left, right);
}
}
void read() {
f>>n;
for (int i=1;i<=n;i++)
f>>C[i];
}
void output() {
f>>n;
for (int i=1;i<=n;i++)
g<<C[i]<<' ';
}
int main() {
read();
quicksort(1,n);
output();
f.close(); g.close();
return 0;
}