字符串排序String Sorts
键索引计数法
- 频率统计
- 第一步就是用 int 数组
count[]
计算每个键出现的频率
- 第一步就是用 int 数组
- 将频率转换成索引
- 使用
count[]
来计算每个键在排序结果中的起始索引位置
- 使用
- 数据分类
- 在将
count[]
数组转换为一张索引表之后,将所有元素移动到一个辅助数组aux[]
- 在将
- 回写
- 最后一步将排序的结果复制回原数组中
|
|
命题A:键索引计数法排序N个键为0到R-1之间的整数的元素需要访问数组11N+4R+1
次。
低位优先的字符串排序
命题B:低位优先的字符串排序算法能够稳定地将定长字符串排序。
代码:
命题B(续):对于基于R个字符的字母表的 N 个以长为 W 的字符串为键的元素,低位优先的字符串排序需要访问~7WN + 3WR 次数组,使用的额外空间和 N+R 成正比。
高位优先的字符串排序
代码实现:
小型子数组对于高位优先的字符串排序的性能至关重要。
对于含有大量等值键的子数组的排序会较慢
三向字符串快速排序
相比于前面两种字符串排序方式,三向字符串快速排序不需要额外的空间。
随机化:和快速排序一样,最好在排序之前将数组打乱或是将第一个元素和一个随机位置的元素交换以得到一个随机的切分元素。
命题E:要将含有N个随机字符串的数组排序,三向字符串快速排序平均需要比较字符~2NlnN次。
MSD.java