求助附代码,快排超时80分,归并排序ac
查看原帖
求助附代码,快排超时80分,归并排序ac
322177
cugthehun楼主2020/7/25 09:38

快排:

#include<iostream>
using namespace std;
int a[5000020];
void qsort(int l,int h)
{
	if(l>=h) return;
	int mid=(l+h)/2;
	int p=a[mid];
	swap(a[l],a[mid]);
	int i=l,j=h;
	while(l<h)
	{
		
		while(l<h&&a[h]>=p)
		{
			h--;
		}
		a[l]=a[h];
		while(l<h&&a[l]<=p)
		{
			l++;
		}
		a[h]=a[l];

		
	}
	a[l]=p;
	qsort(i,l-1);
	qsort(l+1,j);
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>a[i];
	qsort(0,n-1);
	for(int i=0;i<n;i++)
	cout<<a[i]<<" ";
}

归并:

#include<iostream>
using namespace std;
int a[100010];
int b[100010];
void merge(int a[],int low,int mid,int high)
{
	int i,j,k;
	for( i=low;i<=high;i++)
	b[i]=a[i];
	for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++)
	{
		if(b[i]<=b[j])
		a[k]=b[i++];
		else
		a[k]=b[j++];
	}
	while(i<=mid) a[k++]=b[i++];
	while(j<=high) a[k++]=b[j++];
}
void mergesort(int a[],int low,int high)
{
	if(low<high)
	{
		int mid=(low+high)/2;
		mergesort(a,low,mid);
		mergesort(a,mid+1,high);
		merge(a,low,mid,high);
	}
}
int main()
{
	int n;
	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]<<" ";
}
2020/7/25 09:38
加载中...