图解数据结构】 二叉树遍历

 本文将介绍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区快速排序:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信