vector版
下面展示 vector版本归并排序模板
。
#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e6+10;
int n;
vector<int> a(maxn),temp(maxn);
void merge_sort(vector<int> &a,int l,int r){
if(l>=r)return ;
int mid=l+r>>1;//(l+r)/2
merge_sort(a,l,mid),merge_sort(a,mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r){
if(a[i]<=a[j])temp[k++]=a[i++];
else temp[k++]=a[j++];
}
while(i<=mid)temp[k++]=a[i++];
while(j<=r)temp[k++]=a[j++];
for(i=l,j=0;i<=r;i++,j++)a[i]=temp[j];
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
merge_sort(a,0,n-1);
for(int i=0;i<n;i++)printf("%d ",a[i]);
return 0;
}
普通数组版
下面展示 普通数组版本归并排序模板
。
#include<iostream>
using namespace std;
const int maxn=1e6+10;
int n;
int a[maxn],temp[maxn];
void merge_sort(int *a,int l,int r){
if(l>=r)return ;
int mid=l+r>>1;//(l+r)/2
merge_sort(a,l,mid),merge_sort(a,mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r){
if(a[i]<=a[j])temp[k++]=a[i++];
else temp[k++]=a[j++];
}
while(i<=mid)temp[k++]=a[i++];
while(j<=r)temp[k++]=a[j++];
for(i=l,j=0;i<=r;i++,j++)a[i]=temp[j];
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
merge_sort(a,0,n-1);
for(int i=0;i<n;i++)printf("%d ",a[i]);
return 0;
}
观察可以看出二者不同只在两个地方,如下所示:
即只有存储数据的“容器”初始化和quick_sort函数参数表达形式不同,另外包含vector库函数即可。
判题地址:
AcWing787. 归并排序