【排序】归并排序
现在手写排序的同学们越来越少了,但是在一些题目中,利用手写的排序可能会让题目更加的简单。下面我会上传一些排序模板。
归并排序
归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
#include<iostream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; int n,a[101],b[101]; void y(int l,int r) { int m,i,j,k; if (l==r) return; m=(l+r)/2; y(l,m); y(m+1,r); i=l; j=m+1; k=l; while (i<=m&&j<=r) { if (a[i]<=a[j]) { b[k]=a[i]; k++; i++; } else { b[k]=a[j]; k++; j++; } } while (i<=m) { b[k]=a[i]; k++; i++; } while (j<=r) { b[k]=a[j]; k++; j++; } for (int i=l;i<=r;i++) a[i]=b[i]; return; } int main() { cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; y(1,n); for (int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }
作者:暄妍
我的博客:http://www.cnblogs.com/zbyrainbow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。