zoukankan      html  css  js  c++  java
  • n*logn的排序算法

    快排

    #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;
    } 
  • 相关阅读:
    第一学期心得
    第十三次作业
    第十二次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
  • 原文地址:https://www.cnblogs.com/zhouzhihao/p/10391415.html
Copyright © 2011-2022 走看看