#include <iostream>
#include <vector>
using namespace std;
//传入一个n,返回10的n次方
int my_ten_power(int n)
{
int power=1;
for(int i=0;i<n;i++) power*=10;
return power;
}
//传入一个值num和表示位数的place(其中1表示个位,2表示十位以此类推)
//返回这个数在该位的值
int find_place_num(int num,int place)
{
return num%my_ten_power(place)/my_ten_power(place-1);
}
//传入一个向量和其中最大值位数
//将这个向量按照从小到大进行基数排序
void radix_sort(vector<int> &array,int maxplace)
{
vector<int> bucket[10];
for(int i=1;i<=maxplace;i++)
{
if(i==1)
{
while(!array.empty())
{
bucket[find_place_num(array.front(),i)].push_back(array.front());
array.erase(array.begin(),array.begin()+1);
}
}
else
{
vector<int> newbucket[10];
for(int j=0;j<10;j++)
{
while(!bucket[j].empty())
{
newbucket[find_place_num(bucket[j].front(),i)].push_back(bucket[j].front());
bucket[j].erase(bucket[j].begin(),bucket[j].begin()+1);
}
}
for(int j=0;j<10;j++)
{
bucket[j].swap(newbucket[j]);
}
}
}
for(int j=0;j<10;j++)
{
while(!bucket[j].empty())
{
array.push_back(bucket[j].front());
bucket[j].erase(bucket[j].begin(),bucket[j].begin()+1);
}
}
}
//遍历打印向量所有元素
void print_vector_array(const vector<int> &array)
{
for(int i=0;i<array.size();i++) printf("%d ",array[i]);
printf("\n");
}
int main(int argc, char *argv[])
{
int temp;
vector<int> array;
while(scanf("%d",&temp)!=EOF)
{
array.push_back(temp);
}
print_vector_array(array);
radix_sort(array,3);
print_vector_array(array);
return 0;
}
基数排序的C++实现
最新推荐文章于 2024-03-19 15:54:54 发布