基数排序属于分配式排序,它是透过键值的部分资讯,将要排序的元素分配到某些“桶”中,打到排序的作用,基数排序属于稳定性的排序。
对于基数排序有两种实现方法:最高位优先(即MSD法):先将k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成自组,之后的关键码也如此操作,直到kd。在将各组连接起来,就得到一个有序序列。
最低位优先(即LSD法):先从kd开始排序,在对kd-1排序,直到对k1排序,最后将各组连接起来,得到一个有序序列。
LSD(实现过程):
73, 22, 93, 43, 55, 14, 28, 65, 39, 81
首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:
0
1 81
2 22
3 73 93 43
4 14
5 55 65
6
7
8 28
9 39
第二步
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
81, 22, 73, 93, 43, 14, 55, 65, 28, 39
接着再进行一次分配,这次是根据十位数来分配:
0
1 14
2 22 28
3 39
4 43
5 55
6 65
7 73
8 81
9 93
第三步
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
14, 22, 28, 39, 43, 55, 65, 73, 81, 93
这样便将这个数组中的元素排序了。
具体实现的代码如下:
#include
using namespace std;
const int MAXSIZE = 10; //数组的长度
int main()
{
int data[MAXSIZE] = {432, 123, 544, 235, 146, 665, 217, 903, 334, 864};
int _queue[MAXSIZE][MAXSIZE] = {0};
int order[MAXSIZE] = {0};
cout << "排序前数组的顺序:" << endl;
for(int i=0; i