排序
排序
1.快速排序
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100001];
void qsort(int l, int r)
{
if(l>=r)return;
int i=l,j=r,x=a[l];
while(i<j)
{
while(i<j&&a[j]>=x) j--;//从右向左找第一个小于x的数
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j &&a[i]<x)i++;//从左向右找第一个大于等于x的数
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=x;
qsort(l,i-1);//递归调用
qsort(i+1,r);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
qsort(1,n);
for(int i=1;i<=n;i++)printf("%d ",a[i]);
return 0;
}
2.归并排序
输入n(n<=10^5),再输入n个int范围内的整数,请把这n个数排序后输出。
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100010],b[100010];
long long ans;
void msort(int L,int R)
{
if(L==R)return;
int mid=(L+R)/2;
msort(L,mid);
msort(mid+1,R);
int i=L,j=mid+1,k=0;
while(i<=mid && j<=R)
{
k++;
if(a[i]<=a[j])b[k]=a[i],i++;
else b[k]=a[j],j++;
}
for(int p=i;p<=mid;p++)
{
k++;
b[k]=a[p];
}
for(int p=j;p<=R;p++)
{
k++;
b[k]=a[p];
}
for(int p=1;p<=k;p++)a[L+p-1]=b[p];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
msort(1,n);
for(int i=1;i<=n;i++)printf("%d ",a[i]);;
return 0;
}