手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

C++归并排序详解

时间:2024-10-12 08:58:29

1、归并排序(mergesort)是建立在归并操作上的一种有效的排序算法,时间复杂度是 O(nlogn)归并排序是一个稳定排序算法,这意味着无论什么数据,它的时间复杂度都是 O(nlogn)其中 n 是要排序的元素个数,log 以 2 为底

C++归并排序详解

2、接下来是主要过程定义:mergesort(l,r) 表示把区间 [l,r] 排成有序的

C++归并排序详解

3、step1:设置递归边界当 l==r 的时候,区间 [l,r] 已经是有序的了,直接返回即可

C++归并排序详解

4、step2:设 m 为 (l+r)/2(下取整)因为排序的时候要保证 [l,m] 和 [m+1,r] 是有序的,所以我们先递归

C++归并排序详解

5、step3:好的,这时候 [l,m] 和 [m+1,r] 已经是有序的我们新开一个 b 数组,从 [l,m] 和 [m+1,r] 的开头依次取出小(如果从大到小就选大)的数放到 b 数组里,然后跳过这个数

C++归并排序详解

6、step4:要是有区间还有剩余的数怎么办?将它们依次装进 b 数组

C++归并排序详解

7、step5:最后别忘了将 b 数组赋值回原来的区间

C++归并排序详解

8、至此,归并排序就完成了,因为 [l,m] 和 [m+1,r] 都是有序的,所以排出来的 [l,r] 也一定是有序的贴两张自己做的图(这是从大到小排序)

C++归并排序详解
C++归并排序详解

9、试试实际应用,归并排序还可以用来求逆序对

C++归并排序详解

10、以上就是如何写归并排序的详解及其应用,归并排序作为一个稳定排序方法,如果熟练运用能够带来很大的帮助

C++归并排序详解
© 手抄报圈