分治法 ----归并排序
Posted liuzhaojun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治法 ----归并排序相关的知识,希望对你有一定的参考价值。
分治法的思想就是把一个难以解决的大问题分解成很多个小规模的问题--分而治之,说实话我不明白和dp的区别
/* Name: Copyright: Author: 流照君 Date: 2019/9/13 11:03:29 Description: */ #include <iostream> #include<string> #include <algorithm> #include <vector> #define inf 10010 using namespace std; typedef long long ll; void merge(int arr[],int l,int t,int r) int a1[inf],b1[inf]; fill(a1,a1+inf,inf); fill(b1,b1+inf,inf);//这是必要的 for(int i=0;i<=t-l;i++) a1[i]=arr[i+l]; for(int i=0;i<r-t;i++) b1[i]=arr[i+t+1]; int i=0,j=0; for(int k=l;k<r+1;k++) if(a1[i]<b1[j]) arr[k]=a1[i]; i++; else arr[k]=b1[j]; j++; void mergesort(int *arr,int l,int r) if(l<r) int t=(l+r)/2; mergesort(arr,l,t); mergesort(arr,t+1,r); merge(arr,l,t,r); int main(int argc, char** argv) //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n,a[inf]; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; mergesort(a,0,n-1); for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0;
以上是关于分治法 ----归并排序的主要内容,如果未能解决你的问题,请参考以下文章