本文将介绍3区基数快速排序、后缀排序法。
1. 前文回顾
与MSD基数排序一样,每个字符配一个正数键索,用于比较字符间的大小。
首先,对a[0](she)的第一个字符(s)进行3区快速排序:

3区快速排序会把整个数组分为3个区:
第一个区里的所有字符串的第一个字符都比(she)的第一个字符(s)小,它含有a[0]、a[1];
第二个区里的所有字符串的第一个字符都与(she)的第一个字符(s)相同,它含有a[2]~a[11];
第三个区里的所有字符串的第一个字符都比(she)的第一个字符(s)大,它含有a[12]、a[13]。
然后从上往下的,先看第一个区,此区含有多个字符串,对此区的第一个字符串(by)的第一个字符(b)进行3区快速排序:(为了方便观察,待排序的字符串用黑色表示)

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第一个字符都比(by)的第一个字符(b)小,它含有a[0];
第二个区里的所有字符串的第一个字符都与(by)的第一个字符(b)相同,它含有a[1];
第三个区里的所有字符串的第一个字符都比(by)的第一个字符(b)大,它没有元素;
然后从上往下的,先看第一个区,它只有一个字符串,此区排序完毕;
看第二个区,它只有一个字符串,此区排序完毕;
看第三个区,它没有字符串,此区排序完毕;
(为了方便观察,已排序完毕的字符串用绿色表示)

然后看下一个区,此区含有多个字符串,对此区的第一个字符串(seashells)的第二个字符(e)进行3区快速排序:

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第二个字符都比(seashells)的第二个字符(e)小,它没有元素;
第二个区里的所有字符串的第二个字符都与(seashells)的第二个字符(e)相同,它含有a[2]~a[6];
第三个区里的所有字符串的第二个字符都比(seashells)的第二个字符(e)大,它含有a[7]~a[11];
然后从上往下的,先看第一个区,它没有字符串,此区排序完毕;
看第二个区,它有多个字符串,对此区的第一个字符串(seashells)的第三个字符(a)进行3区快速排序:

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第三个字符都比(seashells)的第三个字符(a)小,它没有元素;
第二个区里的所有字符串的第三个字符都与(seashells)的第三个字符(a)相同,它含有a[2]~a[4];
第三个区里的所有字符串的第三个字符都比(seashells)的第三个字符(a)大,它含有a[5]~a[6];
然后从上往下的,先看第一个区,它没有字符串,此区排序完毕;
看第二个区,它有多个字符串,对此区的第一个字符串(seashells)的第四个字符(s)进行3区快速排序:

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第四个字符都比(seashells)的第四个字符(s)小,它含有a[2];
第二个区里的所有字符串的第四个字符都与(seashells)的第四个字符(s)相同,它含有a[3]~a[4];
第三个区里的所有字符串的第四个字符都比(seashells)的第四个字符(s)大,它没有元素;
然后从上往下的,先看第一个区,它只有一个字符串,此区排序完毕;
看第二个区,它有多个字符串,对此区的第一个字符串(seashells)的第五个字符(h)进行3区快速排序:

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第五个字符都比(seashells)的第五个字符(h)小,它没有元素;
第二个区里的所有字符串的第五个字符都与(seashells)的第五个字符(h)相同,它含有a[3]~a[4];
第三个区里的所有字符串的第五个字符都比(seashells)的第五个字符(h)大,它没有元素;
然后从上往下的,先看第一个区,它没有字符串,此区排序完毕;
看第二个区,它有多个字符串,对此区的第一个字符串(seashells)的第六、七、八、九、十个字符(h)进行3区快速排序:(由于这两个字符串是一样的,排序结果不变,这里省略中间过程,直接到第十个字符的排序)

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第五个字符都比(seashells)的第五个字符(h)小,它没有元素;
第二个区里的所有字符串的第五个字符都与(seashells)的第五个字符(h)相同,它含有a[3]~a[4];
第三个区里的所有字符串的第五个字符都比(seashells)的第五个字符(h)大,它没有元素;
然后从上往下的,先看第一个区,它没有字符串,此区排序完毕;
看第二个区,它有多个字符串,但此区的第一个字符串(seashells)没有第十一个字符,故此区排序结束;
看第三个区,它没有字符串,此区排序完毕;
看下一个区,它有多个字符串,对此区的第一个字符串(sells)的第四个字符(l)进行3区快速排序:

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第四个字符都比(sells)的第四个字符(l)小,它没有元素;
第二个区里的所有字符串的第四个字符都与(sells)的第四个字符(hl)相同,它含有a[5]~a[6];
第三个区里的所有字符串的第四个字符都比(sells)的第四个字符(l)大,它没有元素;
然后从上往下的,先看第一个区,它没有字符串,此区排序完毕;
看第二个区,它有多个字符串,对此区的第一个字符串(sells)的第五、六个字符(h)进行3区快速排序:(由于这两个字符串是一样的,排序结果不变,这里省略中间过程,直接到第六个字符的排序)

3区快速排序会把整个区分为3个区:
第一个区里的所有字符串的第六个字符都比(sells)的第六个字符小,它没有元素;
第二个区里的所有字符串的第六个字符都与(sells)的第六个字符相同,它含有a[5]~a[6];
第三个区里的所有字符串的第六个字符都比(sells)的第六个字符大,它没有元素;
然后从上往下的,先看第一个区,它没有字符串,此区排序完毕;
看第二个区,它有多个字符串,但此区的第一个字符串(sells)没有第七个字符,故此区排序结束;
看第三个区,它没有字符串,此区排序完毕;
看下一个区,它有多个字符串,对此区的第一个字符串(shells)的第三个字符(e)进行3区快速排序:
