算法介绍
合并排序算法原理简单,时间复杂度低,且算法具有稳定性,在各类排序算法中具有较好的性能。本文将介绍合并算法的原理,并给出其C语言的实现。
合并排序将待排序数组分隔成两个部分。先将这两个子数组进行排序,然后再将其合并。对于子数组的排序,则可以递归调用合并排序算法本身。
算法分成数组拆分,与合并两个部分。拆分的实现较为简单,可以直接将数组从中间分隔成两个子数组。递归调用拆分,直到所有的子数组都只含有1个元素位置。
接下来是合并过程。将两个子数组合并成为一个数组。合并时,比较两个子数组的元素,将较大的数(如果是递增排序则选取较小的数)放在新数组靠前的位置。合并完成后,得到的数组为有序数组。递归调用合并函数,最终完成排序。
①②③④ 为每次合并时移动元素的次序。通过比较两个子数组的元素大小来确定。实际上,由于子数组已经是有序数组,我们只需要比较子数组的第一个元素的大小就可以判断其在新数组中的位置。以下是每一步移动的原理图。
从该原理图中也可以看出,该排序算法需要一个临时数组来储存合并后的数组。且该临时数组的长度需要和原始数组长度一致。
算法性能
合并排序算法的时间复杂度为O(n*log2(n)),其空间复杂度为O(n),同时算法具有稳定性。该算法适用于对速度要求较高,同时有足够的内存来存放临时数据的场合。
C语言实现