Pagini recente » Cod sursa (job #1827741) | Cod sursa (job #239746) | Cod sursa (job #683103) | Cod sursa (job #94375) | Cod sursa (job #978875)
Cod sursa(job #978875)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int base = 1023,pbase = 10;
vector<int> AUX(500002);
vector<int>Count(base+10);
void RadixSort( vector<int>& A ){
int step = 0;
int n = A.size();
for ( int pasi = 1 ; pasi <= 4; ++pasi ){
for ( int i = 0 ; i < n ; ++i ){
++Count[ (A[i]>>step)&base ];
}
for ( int i = 1 ; i <= base ; ++i ){
Count[i] += Count[i-1];
}
for ( int i = n -1; i >= 0 ; --i ){
int last = ((A[i]>>step)&base);
AUX[ --Count[last] ] = A[i];
}
step += pbase;
for ( int i = 0 ; i < n ; ++i ){
A[i] = AUX[i];
}
for ( int i = 0 ; i <= base ; ++i ){
Count[i] = 0;
}
}
}
void read( vector<int>& a )
{
ifstream f("algsort.in");
int n;
f >> n;
string FileData( ( istreambuf_iterator<char> ( f ) ) , istreambuf_iterator < char > ( ) ) ;
int l = FileData.length();
int nr = 0;
for ( int i = 1; i < l; ++i )
if ( isdigit( FileData[i] ) )
nr = nr * 10 + ( FileData[i] - 48 );
else
{
a.push_back( nr );
nr = 0;
}
f.close();
}
void write( vector<int> a )
{
ofstream g("algsort.out");
for ( int i = 0; i < a.size(); i++ )
g << a[i] << " ";
g << "\n";
g.close();
}
int main()
{
vector<int> v;
read(v);
RadixSort(v);
write(v);
return 0;
}