归并排序
[编程语言教程]

归并排序

我终于看了归并排序了!!!其实我很久之前就准备把瑞士轮给做了,但是,我发现用STL里的sort过不了过后我就没再管它了,今天又看到了这道题,我还是决定看一看神奇的归并排序。

由于不喜欢看好多好多字,我们先放一张图(简单易懂)

技术图片  

我当时看到这图过后就恍pang然ran大da悟wu了,突然就懂了它的基本思想:归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。(感谢百度百科)(说人话就是采用一个分治的思想,然后在分成的每一小段<就先两个两个比,再四个四个比…>内进行排序,因为每一段都是有序的,在后来的每一步合并操作之中就都很方便了,只需要考虑四种情况<马上会在代码里面提到>,最后的最后,将它们合并成一个整体的操作)

所以代码怎么实现?因为我没想出来,就去网上看了看其他大神写的模版,然后我又突然就懂了(什么,又懂了?)

首先我们从main函数开始倒着往回推

1 int main(){
2     int n,a[10005];
3     cin>>n;
4     for(int i=0;i<n;i++) cin>>a[i];
5     mergesort(a,0,n);
6     for(int i=0;i<n;i++) cout<<a[i];
7     return 0;
8 }
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 归并排序