//基数排序
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#define KEYNUMBER 3//整型数的位数
#define RADIX 10//每位数字从0到9共有九个
#define NUMBER 100
using namespace std;
int getNumInPos(int,int);
void radixSort(int *,int);
void print(int *,int);
int main()
{
int pData[NUMBER];
srand((unsigned(time(NULL))));
for(int i=0;i<NUMBER;i++)
{
pData[i] = rand()%1000;//产生三位以内的随机数
}
cout << "before radixSort:" << endl;
print(pData,NUMBER);
radixSort(pData,NUMBER);
cout << "\nafter radixSort:" << endl;
print(pData,NUMBER);
system("pause >> cout");
return 0;
}
//pos从1开始
//number为整形数据,pos是要获得的整形数据从低到高第pos位数据
int getNumInPos(int number,int pos)
{
int temp = 1;
for(int i=1;i<pos;i++)
{
temp = temp * 10;
}
return (number/temp)%10;
}
//pDataArray为无序数组,number为无序数组元素个数
void radixSort(int *pDataArray,int number)
{
int *radixArray[RADIX];//分配0到9的序列空间
for(int i=0;i<RADIX;i++)
{
radixArray[i] = new int[number+1];
radixArray[i][0] = 0;//index为0处记录这组数据的个数
}
for(int pos=1;pos<=KEYNUMBER;pos++)//从个位开始到第KEYNUMBER位
{
for(int i=0;i<number;i++)//分配过程
{
//得到元素在pos位的数值
int num = getNumInPos(pDataArray[i],pos);
int index = ++radixArray[num][0];//得到此时元素在radixArray中的下标
radixArray[num][index] = pDataArray[i];
}
for(int i=0,j=0;i<RADIX;i++)//收集
{
for(int k=1;k<=radixArray[i][0];k++)
{
pDataArray[j++] = radixArray[i][k];
}
radixArray[i][0] = 0;//复位 ,这个一定不能忘额
}
}
}
void print(int *pDataArray,int number)
{
for(int i=0;i<number;i++)
{
cout << setw(4) << pDataArray[i];
if((i+1)%15==0)
cout << endl;
}
}
基数排序
最新推荐文章于 2022-03-16 22:09:29 发布