#include<iostream>
#include<math.h>
#include<time.h>
using namespace std;
struct data
{
int number;
data *link;
};
void RadixSort(int a[],int k,int number);
int main()
{
int a[11];
srand((unsigned int(time(NULL))));//导入时间种子加每次运行结样试下伪随机数种子
for (int i=0;i<11;i++)
{
a[i]=rand()%1000;
while(a[i]<100)
a[i]=rand()%1000;
}
for(int i=0;i<11;i++)
cout<<a[i]<<" ";
cout<<endl;
RadixSort(a,3,11);
for(int i=0;i<11;i++)
cout<<a[i]<<" ";
return 0;
}
void RadixSort(int a[],int k,int number)//a数组,k位数,number元素个数
{
int i=0;//for循环
int v;
int count=k+1,bit;//求元素某位数字
data *NumberArray=new data [10];//是一张存放0-9的表
data *p,*first;//指针
for(i=0;i<10;i++)//清空表链
NumberArray[i].link=0;
while(k>0)//循环次数
{
for(i=0;i<number;i++)
{
p=new data;
p->number=a[i];
p->link=0;//将元素放入链指针中
bit=count-k;//找元素位数上的数
while(bit)
{
v=a[i]%10;
a[i]=a[i]/10;bit--;
}
if(NumberArray[v].link==0)//将元素中第v位数字的元素放入表v中
NumberArray[v].link=p;
else
{
first=NumberArray[v].link;
while(first->link)
first=first->link;
first->link=p;
}
}
for(i=0,v=0;i<10;i++)//将表上的元素重新按排好的顺序放入数组中
{
p=NumberArray+i;
first=NumberArray[i].link;
while(first)
{
a[v]=first->number;
v++;
p=first;
first=first->link;
delete p;
}
NumberArray[i].link=0;//清0,重复循环
}
k--;
}
delete []NumberArray;
}
(算法设计技巧与分析)RadixSort
最新推荐文章于 2024-02-03 21:06:50 发布