天天看点

软考之排序算法(四)——归并排序、基数排序

    前面三篇文章分别介绍了插入排序、选择排序和交换排序,今天将最后两个排序讲完,分别是归并排序和基数排序。

******************************************************************************************************

1、归并排序:

定义:所谓归并就是将两个或两个以上的有序文件合并成为一个新的有序文件。归并排序就是有n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后两两归并,得到n/2个长度为2或1的有序文件,再两两归并,如此重复直至最后形成包含n个记录的有序文件为止。

举例:假设待排序列为8,2,6,7,3,9,4 按照从大到小的顺序排序。

软考之排序算法(四)——归并排序、基数排序

把这个无序序列想象成是8个长度为1的有序序列,得到下述序列

软考之排序算法(四)——归并排序、基数排序

2、基数排序:

定义:基数排序又称“桶子法”,是透过键值的部分资讯将要排序的元素分配至某些“桶”中,藉以达到排序的作用。基数排序的思想是按组成关键字的各个数位的值进行排序,它是分配排序的一种。

举例:我们具体举一个例子来说明基数排序是怎样进行的。假设待排序列为10,24,45,32,22,49,98,首先根据各个数值“个位数”|的大小,分别放在不同的“个位”桶子里。

软考之排序算法(四)——归并排序、基数排序
软考之排序算法(四)——归并排序、基数排序

然后将这些桶子里的数值重新串联起来,得到下面一个新的序列。10,32,22,24,45,98,49 然后按照各个数值“十位数”的大小,分别放在不同的“十位”桶子里。

软考之排序算法(四)——归并排序、基数排序
软考之排序算法(四)——归并排序、基数排序

    然后将这些“十位”桶子里面的数值重新串联起来,得到如下数列10,22,24,32,45,49,98 这时候整个数列已经排序完毕。如果排序的对象中有三位以上的话,还要重复上述方法,将数值放入“百位”、“千位”桶子中。

******************************************************************************************************

******************************************************************************************************

    至此,我们就把这五类八种排序算法介绍完了。在各种算法中我着重介绍的是如何进行排序,因为在具体的学习过程中,书上的定义很标准但是并不能让人一目了然。排序算法很多,也常常让人头晕,本着学习、总结的态度,同时也把总结的结果分享给大家,欢迎大家提宝贵意见,我们一同进步!

继续阅读