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终位置,排序结果储存数组的起位置,比较函数);
  • 相关阅读:
    创业日记-时间过的也快也慢
    通过获取客户端Json数据字符串,反序列化为实体对象的一段代码
    Sandcastle是什么
    使用VisualSVN Server自动发布站点
    Microsoft Visual Studio Ultimate 2015 Preview使用笔记
    俞敏洪:自卑比狂妄更糟糕
    灰度发布
    TLV格式是什么格式
    zend studion实现自动换行
    数字格式化,从右往左每隔三位加逗号的四种方法
  • 原文地址:https://www.cnblogs.com/muzu/p/6684988.html
Copyright © 2011-2022 走看看