其他分享
首页 > 其他分享> > 归并排序(二路归并)

归并排序(二路归并)

作者:互联网

归并排序,采用分治法,将目标数组划分为有序数组,将划分后有序数组合并为有序数组的过程。

1)分:我们可以认为,数组长度为1的数组是有序数组。所以归并排序中分即为将目标数组划分为数组长度为1的最小单位有序数组

2)合:两两合并划分的数组,定义目标长度为两划分数组长度和的临时数组,比较两数组元素值,将较小者依次放入临时数组中

3)再以元素为2的n次方递增顺序重复步骤一、二,直至,划分的临时数组长度为目标数组的一半再合并即为目标数组,归并排序完成

例:

目标数组为:{8,6,13,1,12,0,7,0,2,10,0,3,7,20,7}

划分为最小单位数组 :{8} , {6} , {13} , {1} , {12} , {0} , {7} , {0} , {2} , {10} , {0} , {3} , {7} , {20} , {7}

两两数组合并后 :{6,8}, {1, 13, {0, 12}, {0, 7}, {2, 10}, {0, 3}, {7, 20}, {7}

将两两合并后的有序数组合并为等于目标数组长度的数组:

第一次归并后,目标数组变成:{6, 8, 1, 13, 0, 12, 0, 7, 2, 10, 0, 3, 7, 20, 7}

重复第一、二步骤,此时,划分的临时数组长度为2

划分后数组为:{6,8}, {1, 13, {0, 12}, {0, 7}, {2, 10}, {0, 3}, {7, 20}, {7}

两两数组合并后:{1, 6, 8, 13} , {0, 0, 7, 12} , {0, 2, 3, 10} , {7, 7, 20}

将两两合并后的有序数组合并为等于目标数组长度的数组:

第二次合并后,目标数组变成:{1, 6, 8, 13, 0, 0, 7, 12, 0, 2, 3, 10, 7, 7, 20}

重复一、二步骤,此时,划分临时数组长度为2*2

合并后,目标数组变成:{0, 0, 1, 6, 7, 8, 12, 13, 0, 2, 3, 7, 7, 10, 20}

重复一、二步骤,此时,划分临时数组长度为2*2*2

合并后,目标数组变成:{0, 0, 0, 1, 2, 3, 6, 7, 7, 7, 8, 10, 12, 13, 20}

代码示例:

 

标签:10,归并,12,20,二路,合并,13,数组,排序
来源: https://blog.csdn.net/qq_63435529/article/details/121380610