归并排序是一种比较重要、稳定的排序。他的核心思想是分治,也就是二分法,实现方法是递归。递归函数可以让我们到达最小单元使最小单元有序,进而向上级回溯,不断的调整更大的单元,最终使整个序列有序。
代码及样例如下:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[100]; void Merge(int l,int mid,int r){ int k=0,tmp[100],i=l,j=mid; while(i < mid && j < r){ if(a[i] <= a[j]){ tmp[k++] = a[i++]; } else{ tmp[k++] = a[j++]; } } while(i < mid){ tmp[k++] = a[i++]; } while(j < r){ tmp[k++] = a[j++]; } for(int i = l;i < r;i++){ a[i] = tmp[i-l]; } } void Mysort(int l,int r){ if(l+1 == r) return ; int mid = (l+r)>>1; Mysort(l,mid); Mysort(mid,r); Merge(l,mid,r); } int main(){ int n; //freopen("1.txt","r",stdin); while(~scanf("%d",&n)){ for(int i = 0;i < n;i++){ scanf("%d",&a[i]); } Mysort(0,n); for(int i = 0;i < n;i++){ printf("%d ",a[i]); } puts(""); } }
5
5 4 3 2 1
6
1 25 4 2 6 3
3
5 4 2
15
879789 15 212 20 2 -100 54 1 0 -0 48 78 78974 1561651 15