快排
#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
void q_sort(int l,int r)
{
if(l>=r) return;
int mid,i=l,j=r;
mid=a[(l+r)/2];
while(i<=j)
{
if(l>=r) return;
while(a[i]<mid)
i++;
while(a[j]>mid)
j--;
if(i<=j)
{
swap(a[i],a[j]);
i++;j--;
}
}
q_sort(l,j);
q_sort(i,r);
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
scanf("%d",a+i);
q_sort(1,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
归并
#include<iostream>
using namespace std;
int a[100005],b[100005];
void m_sort(int l,int r)
{
int mid,i,j,k;
if(l==r)return;
mid=(l+r)/2;
m_sort(l,mid);
m_sort(mid+1,r);
i=l;j=mid+1;k=l;
while(i<=mid && j<=r)
{
if(a[i]<a[j])
{
b[k]=a[i];i++;k++;
}
else
{
b[k]=a[j];j++;k++;
}
}
while(i<=mid)
{
b[k]=a[i];i++;k++;
}
while(j<=r)
{
b[k]=a[j];j++;k++;
}
for(i=l;i<=r;i++)
a[i]=b[i];
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
m_sort(1,n);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}