排序算法——归并排序

今天我们来聊聊归并排序,归并排序中涉及的思想比较复杂。这里主要是分治法和递归法的思想。简单地来说,就是假设可以将所有数组分成两个数组,然后我们可以通过某种方法将两个数组进行排序,然后将两个数组中的数据进行合并。

那么我们此时先考虑如何将两个有序的数组进行合并,我们可以对两个数组中首位进行对比,小的拿出来,再次对比,直至一个数组中数据为空,另一个数组中的数据直接拼接。

假设数组:{1,5,3,6,2,8,4,7}

首先对数组一分为二:{1,5,3,6} {2,8,4,7} 假设我们可以通过某种方法进行排序。{1,3,5,6} {2,4,7,8}

此时我们进行对比进行合并:1<2 ;拿出{1},原数组为:{3,5,6} {2,4,7,8} 再次对比:3<2 ;拿出2

此时新数组为{1,2} 原数组为{3,5,6} {4,7,8} 以此类推,我们就可以进行一个合并。

当我们明确如何合并之后,就可以进入真正的归并算法了,归并算法除了分治法思想外,还有递归思想,在递归思想下,我们的原数组可以一值进行平分,直至数组中数据为1,一个数量为1的数组我们当然认为有序的。

用尽我们的例子中就是 第一次 {1,5,3,6} ,{2,8,4,7}。再次分{1,5} {3,6} 和 {2,8} {4,7}。再次分{1} {5},{3} {6},{2}{8},{4}{7}。

一次递归{1,5} {3,6} ,{2,8}{4,7}

二次递归{1,3,5,6} {2,4,7,8}

三次递归{1,2,3,4,5,6,7,8}

举报
评论 0