zoukankan      html  css  js  c++  java
  • 排序篇(c++/c实现)

    基础篇:

    冒泡排序

    特点:较为容易想到,是初学者耳熟能详的排序算法

    优点:代码精练,易懂

    缺点:效率不够高,一般比赛中可能会超时

    代码:

    #include<cstdio>
    using namespace std;
    int a[10000001];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=n-1;i++)
        for(int j=1;j<=n-i;j++)
        {
            if(a[j]>a[j+1])
            {
                int sb=a[j];a[j]=a[j+1];a[j+1]=sb;
            }
        }
        for(int i=1;i<=n;i++)printf("%d ",a[i]);
    }

    中级篇:

    简易“桶排序”

    特点:可以用来排序并过滤掉重复部分

    优点:速度快,简洁易懂

    缺点:过分浪费内存(没有离散化的思想),遇到稍微大点的数字数组就不够开,限制性较大

    代码:(原代码丢了,用图片代替)

    提高篇:

    快速排序

    特点:利用二分思想

    优点:速度较快,用途广

    缺点:无

    代码:

    #include<cstdio>
    using namespace std;
    int a[10000001];
    void qsort(int left,int right)
    {
        if(left>right)return;
        int i,j,temp;
        temp=a[left];
        i=left;j=right;
        while(i!=j)
        {
            while(a[j]>=temp&&i<j)j--;
            while(a[i]<=temp&&i<j)i++;
            if(i<j)
            {
                int sb=a[j];a[j]=a[i];a[i]=sb;
            }
        }
        a[left]=a[i];a[i]=temp;
        qsort(left,i-1);qsort(i+1,right);
    }
    int main()
    {
        int n;scanf("%d",&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]);
    }

    当然。若你不想手打代码,可以用algorithm库里自带的快排,

    用法:(假设初始位置为0)sort(a,a+n)

    技巧篇:

    归并排序

    特点:将两个有序数组合并为一个有序数组

    优点:面对有序情况效率较高

    缺点:有序的规定限制了它的用途

    用法:

    merge(数组A起位置,数组A终位置,数组B起位置,数组B终位置,排序结果储存数组的起位置,比较函数);
  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/muzu/p/6684988.html
Copyright © 2011-2022 走看看