归并排序(二路归并)

归并排序是一种基于分治法的排序算法,通过不断将数组拆分成小数组再进行合并,最终形成有序数组。主要步骤包括:1) 将数组拆分为长度为1的子数组;2) 两两合并子数组成更大的有序数组;3) 重复合并过程,直至合并为原数组长度。示例中详细展示了归并排序的过程,最终将无序数组{8,6,13,1,12,0,7,0,2,10,0,3,7,20,7}排序为{0,0,0,1,2,3,6,7,7,7,8,10,12,13,20}。" 92802244,8518874,服务机器人中的自然语言处理技术,"['自然语言处理', '机器人技术', '任务规划', '人工智能', '服务机器人']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值