快速排序和归并排序的比较
#include<iostream> #incude<iostream>
using namespace std; using namespace std;
const int N=1000010; const int N=1000010;
int n; int n;
int q[N],tmp[N]; int q[N];
void merge_sort(int q[],int l,int r) void quick_sort(int q[],int l,int r)
{ {
if(l>=r) return; if(l>=r) return;
int mid=(l+r)>>1; int i=l-1,j=r+1,x=q[(l+r)>>1];
int k=0,i=l,j=mid+1;
merge_sort(q,l,mid);
merge_sort(q,mid+1,r);
while(i<=mid&&j<=r) while(i<j)
{ {
if(q[i]<q[j]) tmp[k++]=q[i++]; do i++;while(q[i]<x);
else tmp[k++]=q[j++]; do j--;while(q[j]>x);
if(i<j) {int t=q[i];
q[i]=q[j];
q[j]=t;}
} }
while(i<=mid) tmp[k++]=q[i++]; quick_sort(q,l,j);
while(j<=r) tmp[k++]=q[j++]; quick_sort(q,j+1,r);
for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
} }
int main() int main()
{ {
scanf("%d",&n); scanf("%d",&n);
for(int i=0;i<n;i++) for(int i=0;i<n;i++)
scanf("%d",&q[i]); scanf("%d",&q[i]);
merge_sort(q,0,n-1); quick_sort(q,0,n-1);
for(int i=0;i<n;i++) for(int i=0;i<n;i++)
printf("%d ",q[i]); printf("%d ",q[i]);
return 0; return 0;
} }