算法导论习题8-3—排序不同长度的数据项
题目:
a)给定一个整数数组,其中不同的整数中包含的数字个数可能不同,但是该数组中,所有整数中总的数字数为n。说明如何在O(n)时间内对该数组进行排序
b)给定一个字符串数组,其中不同的串包含的字符个数可能不同,但所有串中总的字符个数为n。说明如何在O(n)时间内对该数组进行排序
(注意此处的顺序是指标准的字母顺序,例如,a < ab < b)
思路:
a)先用桶排序方法按数字位数排序O(n),再用基数排序的方法分别对每个桶中的元素排序O(n),其中桶排序中采用了链表来存储各个位上的数字。在该算法中用到了线性时间排序中的三大算法:桶排序,基数排序,计数排序。
具体思路是:首先根据桶排序将不同位数的数字分别放到不同的链表中,位数相同的数字放到同一个链表中。然后再对每一个链表中的所有数字进行排序,所采用的排序算法是基数排序,其中基数排序中采用的稳定排序算法是计数排序。
LinkNode.h定义了链表的节点及其操作。
Link.h头文件定义了链表常见的操作——插入,删除,得到长度,将链表中的数存储到数组中等。
test.cpp实现了该算法的详细过程: