欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

C语言递归实现归并排序

时间:2023-04-30

归并排序递归实现还是比较难理解的,感觉涉及递归一般理解起来都会比较有难度吧,但是看了b站视频,然后照着打下来,然后自己写了点注释,就发现不知不觉都大概懂了。

这里的归并讲的是升序排序

归并排序思路大概就是:先划分数组,将数组划分为左右半区,分成的左右半区,各自再划分左右半区,一直划分,直到最后左右半区的元素都为一个时,开始合并,因为都划分为一个元素了,那么此时两个元素的排序就非常简单了,只需要比较大小就可以排序了,那么回溯上去会发现每组都是两两有序了,那么直接再依次比较两组之间的排头元素即可,取较小的赋值给临时数组,然后排头元素就变成后一个元素,一直这么比较,直到两组数据有一组为空时,只需要将另一组不为空的接在临时数组后面即可,因为此时不为空的剩下的元素是有序的且都比此时有序的临时数组大,接完之后临时数组就变成有序的数组了,那么再将临时数组的元素复制到实际数组中去,最后释放临时数组空间,输出实际数组,归并排序结束,输出的元素也是排好序的元素了。

这样干讲一定很抽象

这是b站视频里的图,十分生动形象了吧。

链接也给上:https://www.bilibili.com/video/BV1Pt4y197VZ/?spm_id_from=pageDriver讲的十分不错的。

代码如下(除了视频里的注释,还加了点自己的注释)

#includeusing namespace std;void print_arr(int arr[], int n){for(int i=0; i

本文参考https://www.bilibili.com/video/BV1Pt4y197VZ/?spm_id_from=pageDriver

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。