Pagini recente » Cod sursa (job #2706583) | Cod sursa (job #2043455) | Cod sursa (job #382847) | Cod sursa (job #2062316) | Cod sursa (job #507319)
Cod sursa(job #507319)
#include <fstream>
#include <algorithm>
#define KMAX 750000
using namespace std;
int a[500001];
int c[KMAX];
int b[KMAX];
int n;
void insertion(int l, int r){
int i, j, v;
for(i = l + 1; i <= r; i++){
v = a[i];
j = i - 1;
while(j >= l && a[j] > v) {a[j+1] = a[j]; j--;}
a[j+1] = v;
}
}
int Partition(int l, int r)
{
int x = a[(l+r)>>1], aux;
int i = l, j = r;
while(i <= j){
while(a[i] < x) i++;
while(a[j] > x) j--;
if(i <= j) { aux = a[i]; a[i] = a[j]; a[j] = aux; i++; j--; }
}
return j;
}
void count(){
int i, j;
for(i = 1; i <= n; i++)
c[a[i]]++;
b[0] = c[0];
for(i = 1; i < KMAX; i++){
c[i] += c[i-1];
b[i] = c[i];
}
for(i = n; i > 0; ){
while(c[a[i]] != i){
j = a[i];
swap(a[i], a[c[a[i]]]);
c[j]--;
}
i--;
while(i > 0 && (c[a[i]] < (a[i] ? b[a[i]-1]+1 : 1) || i <= b[a[i]]))
i--;
}
}
void quick(int l, int r){
if(r - l > 0){
int q = Partition(l, r);
quick(l, q);
quick(q+1, r);
}
//else insertion(l, r);
}
int main(){
ifstream f("algsort.in");
ofstream g("algsort.out");
int i = 0;
f>>n;
for(i = 1; i <= n; i++)
f>>a[i];
count();
for(i = 1; i <= n; i++)
g<<a[i]<<" ";
return 0;
}