排序

排序

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;
}
posted @ 2024-01-25 20:14  RTER  阅读(2)  评论(0编辑  收藏  举报