-->
当前位置:首页 > 题库 > 正文内容

编程题:Radix Sort (基数排序)

Luz3年前 (2022-03-22)题库744
链式基数排序(这里以对若干个正整数的排序为例描述求解过程):待排序的正整数存放在一个单链表buf中。此外还需要10个单链表,编号为0~9。10个单链表称为10个桶。编写一个程序,读入n个正整数,并按从小到大的顺序排序。

链式基数排序的算法如下:
遍历buf中的每个节点,并根据它的个位将每个值安排某个桶链表中。例如,97安排在桶链表7,3安排在桶链表3,而100安排在桶链表0——这个过程叫分派。

在桶链表中循环,并将值复制回到最初的buf链表——这个过程叫收集。上面的数值在buf中的新顺序是100、3和97。

接下来依次取buf链表中所有数字的十位,百位,千位等等,并按取出的十位,百位,千位等位上的数字不断分派和收集;重复这个过程(分派---收集),当处理完了buf链表中最大数字的最高位时,就停止这个过程。

例如,在对buf链表进行第2轮处理时,100安排在桶链表0,3安排在桶链表0(它仅有一个数位),而97安排在桶链表9。buf链表中值的顺序是97、3和100。在第3轮处理时,100安排在桶链表1,3安排在桶链表0,而97安排在桶链表0(在3之后)。基数排序可以确保在处理了最大数字的最高位之后正确排列所有值的顺序。

##### 注意:为保持输出结果的一致性,我们约定所有单链表的插入都使用头插法。

### 输入格式:

第一行输入待排序个数n(1≤n≤100000),再输入n个正整数(每个数在C语言整型表示范围之内)。

### 输出格式:

输出每趟分派-收集后链表中的关键字,趟数为序列中最大值的数位(如样例中930的数位为3),每行结尾有空格。

### 输入样例:

in
10
278 109 63 930 589 184 505 269 8 83


### 输出样例:

out
930 83 63 184 505 8 278 269 589 109
505 8 109 930 63 269 278 83 184 589
8 63 83 109 184 269 278 505 589 930



### 提示:
见《Data Structures and Algorithm Analysis in C》第3章3.2.7节(54页 Radix Sort)





答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。