• 数据排序


    桶排序

    void In_Solve()
    {
        scanf("%d",&n);
        FORa(i,1,n) scanf("%d",&a),b[a]++; //浪费空间比较大,多一个数组的花费
        FORa(i,1,N) while(b[i]--) printf("%d ",i);
    }

    选择排序

    void Solve()
    {
        FORa(i,1,n)
            FORa(j,i+1,n)
                if(a[i]>a[j])//从第一个开始,依次与后面的开始比较,不符合就换,直到比到第N个
                    swap(a[i],a[j]);
        FORa(i,1,n) printf("%d ",a[i]);
    }

    冒泡排序

    void Solve()
    {
        FORa(i,2,n)
            FORa(j,i,n)
                if(a[j-1]>a[j])//从第一个开始,邻接两个开始比较,不符合就换,直到比到第N个
    swap(a[j-1],a[j]); FORa(i,1,n) printf("%d ",a[i]); }

    插入排序

    oid Solve()
    {
        int fa;
        scanf("%d",&n); 
        FORa(i,1,n)
        {
            scanf("%d",&fa);
            bool f=1;
            FORa(j,1,i-1)
            {
                if(fa<=a[j]) //找到适合的位置
                {
                    FORs(k,i,j) a[k+1]=a[k];//将不符合的往后都挪一个,腾出一个空间,注意:需要从后往前处理,不然数据可能会错误刷新
                    a[j]=fa,f=0;//插入,记得标记
                    break;//尽可能降低时间复杂度
                }
            }    
            if(f) a[i]=fa;//没有插入队伍中,则直接跟上队尾
        }
        FORa(i,1,n) printf("%d ",a[i]);
    }

    快速排序

    void sort(int l,int r) 
    {
        int i=l,j=r,mid=a[(l+r)/2];//确定基准数
        do{
            while(a[i]<mid) i++;//从左往右找到一个大于基准数的的
            while(a[j]>mid) j--;//从右往左找到一个小于基准数的
            if(i<=j) swap(a[i],a[j]),i++,j--;//如果符合定位(基准数)的要求,则交换两者
        }while(i<=j);//符合定位循环
        if(l<j) sort(l,j);//处理左区间
        if(i<r) sort(i,r);//处理右区间
    }

    归并排序

    void sort(int l,int r) 
    {
        if(l==r) return;//一定要记得写,分治的bottom
        int mid=(l+r)/2,i=l,j=mid+1,k=l;
        sort(l,mid),sort(mid+1,r);//处理左右两个区间,使其有序
        while(i<=mid&&j<=r)
        {
            if(a[i]<=a[j]) b[k++]=a[i++];
            else b[k++]=a[j++],ans+=mid-i+1;
        }
        while(i<=mid) b[k++]=a[i++];//处理剩余的部分
        while(j<=r) b[k++]=a[j++];//将a中l-r这段区域进行排序结果储存在b数组中
        FORa(i,l,r) a[i]=b[i];//将b的结果反馈给a
    }
  • 相关阅读:
    设计模式(二十)---迭代器模式
    设计模式(十九)---观察者模式
    设计模式(十八)---模板方法模式
    设计模式(十七)---策略模式
    ElasticSearch 安装
    MongoDB进击 Linux单机安装
    List集合去除重复对象。。。记录一下
    Springboot整合mybatisPlus实现分页
    git记录
    Springboot异常处理errorController
  • 原文地址:https://www.cnblogs.com/SeanOcean/p/10899232.html
Copyright © 2020-2023  润新知