64,282
社区成员
发帖
与我相关
我的任务
分享
#include <vector>
#include <list>
#include <assert.h>
#include <algorithm>
#include <iostream>
using std::cout;
using std::endl;
using std::max_element;
using std::vector;
using std::list;
class radix_sort{
public:
radix_sort(){}
radix_sort( vector<int>& t) : ra(16, list<int>(0,0)), init(t){}
void sort();
void out_put()
{
vector<int>::iterator it = init.begin();
while(it++ != init.end() )
{
cout<<*it<<" ";
}
cout<<endl;
}
private:
radix_sort(const radix_sort& );
radix_sort& operator=(radix_sort& );
vector<list<int> >ra;
vector<int>init;
const int get_key(int data, const int j );
int max();
};
int radix_sort::max()
{
return *max_element(init.begin(), init.end() );
}
const int radix_sort::get_key( int data, const int j)
{
int m = data % j;
return m;
}
void radix_sort::sort()
{
vector<int>::iterator itor;
list<int>::iterator it;
for( int i = 10; i <= max(); i = i * 10)
{
for(itor = init.begin(); itor != init.end(); ++itor )
{
int p = get_key(*itor, i);
ra[p].push_back(*itor);
}
int n = 0;
while(n < 16)
{
for( it = ra[n].begin(); it != ra[n].end(); ++it)
{
init[n] = *it;
ra[n].clear();
}
++n;
}
}
}
int main()
{
int a[] = { 2, 546, 3,223,45,76,23,42};
vector<int>m (a, a + sizeof(a)/sizeof(a[0]) );
radix_sort n(m);
n.sort();
n.out_put();
return 0;
}
#include <vector>
#include <list>
#include <assert.h>
#include <algorithm>
#include <iostream>
using std::cout;
using std::endl;
using std::max_element;
using std::vector;
using std::list;
class radix_sort{
public:
radix_sort(){}
radix_sort( vector<int>& t) : ra(16, list<int>(0,0)), init(t){}
void sort();
void out_put()
{
vector<int>::iterator it = init.begin();
while(it != init.end() )
{
cout<<*it<<" ";
++it;
}
cout<<endl;
}
private:
radix_sort(const radix_sort& );
radix_sort& operator=(radix_sort& );
vector<list<int> >ra;
vector<int>init;
const int get_key(int data, const int j );
int max();
};
int radix_sort::max()
{
return *max_element(init.begin(), init.end() );
}
const int radix_sort::get_key( int data, const int j)
{
int m = data ;
return (m % (10 *j)) / j;
}
void radix_sort::sort()
{
vector<int>::iterator itor;
list<int>::iterator it;
for( int i = 1; i <= max(); i = i * 10)
{
for(itor = init.begin(); itor != init.end(); ++itor )
{
const int p = get_key(*itor, i);
ra[p].push_back(*itor);
}
int n = 0;
int d;
int m = 0;
while((d = n) < 16){
++n;
for( it = ra[d].begin(); it != ra[d].end()&& !(ra[d].empty()); ++it)
{
init[m] = *it;
++m;
}
if(!ra[d].empty())
{
ra[d].clear();
}
}
}
}
int main()
{
int a[] = { 102, 5460, 3,223,45,76,23,42};
vector<int>m (a, a + sizeof(a)/sizeof(a[0]) );
radix_sort n(m);
n.sort();
n.out_put();
return 0;
}