不同的排序算法适用的场合也不尽相同。快速排序虽总体的平均效率是最好的,但也不是任何时候都是最优的算法。我们在实现一个排序算法的时候,一定要清楚这个排序应用的环境是什么,有哪些约束条件,在得到足够多的信息之后在选择最合适的排序算法。下面来看一道题:
实现一个对年龄的排序算法,元素个数在万一级,时间复杂度和空间复杂度不超过O(n).
既然排序的对象是年龄,则数字的大小在一个较小的范围内,所以我们可以用哈希表帮助完成这个算法:
#include <assert.h> void sort_age(int age[], int len) { int i = 0, j = 0, index = 0; int times[100] = {0}; assert(age); if (len <= 0) return; for (i = 0; i < len; i++) { times[age[i]]++; } for (i = 0; i < 100; i++) { for (j = 0; j < times[i]; j++) { age[index] = i; index++; } } }
在上面的代码中,允许的年年龄范围是0~99。数组times用来统计每个年龄出现的次数。某个年龄出现了多少次,就在数组age里设置几次该年龄,这样就相当于给数组age排序了。这个方法用长度100的整数数组作为辅助空间换来了O(n) 的时间效率。
选择适当的排序算法
最新推荐文章于 2022-04-20 22:35:03 发布