基数排序是一种从记录最次位关键字开始排序的方法,比如数据,从个位开始排序,具体的方法可以参照书上,我把书上的伪代码以可运行代码的形式呈现:
难点:书上 f e 数组的实现用了链表,节省了辅助空间,f数组的值只指向该位数第一个值在序列中的位置,该位数上的序列依靠记录本身带有的next指针来连接,e数组的值只指向该位数序列上最后一个值在序列上的位置。
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<cstdlib>
#include<ctime>
using namespace std;
#define Max_num_of_key 8
#define Radix 10
#define Max_space 51000
struct Slcell{
int keys[Max_num_of_key];
int data;
int next;
};
struct Slist{
Slcell r[Max_space];
int keymax;
int length;
};
typedef int Arrtype[Radix];
void buildslist(Slist &sl){//与前面不同,这里的记录多个一个keys用于记录每个data每一位上的数字,用于排序
cout<<"输入需要排序的数据数目和数据的最大位数"<<endl;
cin>>sl.length>>sl.keymax;
cout<<"依次输入数据"<<endl;
for(int i=1;i<=sl.length;++i){
int x;
cin>>x;
sl.r[i].data=x;
}
for(