前言
不同排序算法适用的场合也不尽相同。例如,对于数组有序的情况,使用快速排序算法将达到最坏的时间复杂度O(n^2),那么此种场合下,快速排序算法就不是最优的选择。因此,选择一个排序算法,应当考虑到排序应用的环境、哪些约束条件(比如数据的范围),最后综合考虑后选择相应的排序算法解决。
题目(年龄排序)
请实现一个按年龄排序的算法,其中最大年龄为99岁,要求时间效率为 O(n)(可以使用不超过O(n)的辅助内存)
算法思路 (排序对象有范围限制)
我们看到题目要求的排序时间复杂度要达到 O(n),而那些常见排序算法的最坏时间复杂度基本都达不到 O(n)。我们注意到排序的对象是年龄,它是有约束的,即年龄只能在0-99岁之间。那么,我们可以利用辅助数组来记录每个年龄有多少人次(数组的下标即年龄),那么我们对年龄进行排序的时候,只需要遍历所有年龄,得到相应的人次,然后给年龄数组重新赋值即可。
算法实现
参考
<<剑指offer2>>