数据结构与算法分析(十)线性排序

桶排序: 
1. 原理: 根据数据范围,分成若干个数据段的桶,通过遍历讲数据放到对应的桶中。每个桶里都进行快排或归并。
2. 时间复杂度: 最好o(n), 最坏o(nlogn), 平均o(n),一般桶分的越细越多复杂度就会最好。
3. 内存消耗: o(n)
4. 稳定性: 取决于每个桶的排序方式,快排就不稳定,归并就稳定。
5. 适用场景: 数据范围不大的。内存吃紧的,如磁盘的读写可以分成多个小文件并对每个小文件排序,然后直接写到大文件里,这个时候内存消耗不再是o(n)了。

计数排序:
1. 原理: 特殊的桶排序,即每个下标代表一个数据范围,其值就是这个数据的个数。
2. 时间复杂度: 都是o(n)
3. 内存消耗: o(n)
4. 稳定性: 稳定,只要整理最后结果时从后开始遍历即可。
5. 适用场景: 数据范围不大的,如年龄排序。

基数排序: 
1. 原理: 对数据的每一位进行桶排序或计数排序,对每位排序后结果就是有序的。
2. 时间复杂度: 最好o(n), 最坏o(nlogn), 平均o(n)
3. 内存消耗: o(n)
4. 稳定性: 稳定。否则就排不成的。
5. 适用场景: 是在桶排序和计数排序基础上进行的,保证每位数据范围不大,并且位数也不是很多。

你可能感兴趣的:(数据结构与算法,数据结构与算法)