分治法 ----归并排序
分治法的思想就是把一个难以解决的大问题分解成很多个小规模的问题--分而治之,说实话我不明白和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; }
对了分享一个可视化算法网站https://visualgo.net/zh
如果你够坚强够勇敢,你就能驾驭他们