1. Top k 大的数

  • 排序后直接索引输出:O(nlog⁡n)" role="presentation">O(nlogn)O(nlog⁡n)

    std::sort(v.rbegin(), r.rend());
    return v[k-1];
  • 使用优先队列(O(klog⁡n)" role="presentation">O(klogn)O(klog⁡n),每 pop 一个元素,都需重排大顶堆):

    std::priority_queue<int> PQ(v.rbegin(), v.rend());
    for (size_t i = 0; i < k-1; ++i) {
    PQ.pop();
    }
    return PQ.top();
  • 使用自带函数(随机选择算法,期望耗时 O(n)" role="presentation">O(n)O(n),最坏 O(n2)" role="presentation">O(n2)O(n2)):

    std::nth_element(v.rbegin(), v.rbegin()+k-1, v.rend());
    return v[k-1];

C++ STL 数据结构与算法 —— 排序的更多相关文章

  1. [数据结构与算法]排序算法(Python)

    1.直接插入排序 给定一个数组后,从第二个元素开始,如果比第一个小,就跟他交换位置,否则不动:第三个元素如果比第二个小,把第三个跟第二个交换位置,在把第二个与第一个比较:..... def inser ...

  2. 数据结构与算法---排序算法(Sort Algorithm)

    排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进 ...

  3. 数据结构与算法-排序(六)堆排序(Heap Sort)

    摘要 堆排序需要用到一种数据结构,大顶堆.大顶堆是一种二叉树结构,本质是父节点的数大于它的左右子节点的数,左右子节点的大小顺序不限制,也就是根节点是最大的值. 这里就是不断的将大顶堆的根节点的元素和尾 ...

  4. 数据结构与算法-排序(八)计数排序(Counting Sort)

    摘要 计数排序本质就是统计不同元素出现的次数,然后将元素依次从小到大放置,每个元素看统计的次数,就紧挨着放置几个同样的元素. 看似简单的处理,在算法中,会依据统计的元素次数推算出每个元素的索引位置,这 ...

  5. 数据结构与算法-排序(二)选择排序(Selection Sort)

    摘要 选择排序的逻辑是先遍历比较出序列中最大的,然后把最大的放在最后位置. 遵循这个逻辑,用代码实现时,做到1.减少比较次数之外,这里引入一个新的指标 - 稳定性,2.保证排序过程中的稳定性也是一个优 ...

  6. 数据结构与算法-排序(七)希尔排序(Shell Sort)

    摘要 看希尔排序需要先想象出一个二维的矩阵,在这个矩阵中,有多少列数据全看步长(一定的规则得到).处理完之后,就再接着用另一个步长组成矩阵处理.直到步长全部使用完. 这里的巧妙之处就是没有把序列先处理 ...

  7. 数据结构与算法-排序(九)基数排序(Radix Sort)

    摘要 基数排序是进行整数序列的排序,它是将整数从个位开始,直到最大数的最后一位截止,每一个进位(比如个位.十位.百位)的数进行排序比较. 每个进位做的排序比较是用计数排序的方式处理,所以基数排序离不开 ...

  8. 数据结构与算法-排序(十)桶排序(Bucket Sort)

    摘要 桶排序和基数排序类似,相当于基数排序的另外一种逻辑.它是将取值范围当做创建桶的数量,桶的长度就是序列的大小.通过处理比较元素的数值,把元素放在桶的特定位置,然后遍历桶,就可以得到有序的序列. 逻 ...

  9. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

随机推荐

  1. PostgreSQL主备流复制机制

    原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...

  2. OSS 实例

    步骤 1.初始化ossClient实例 2.判断bucket是否存在(doesBucketExist) 3.上传图片(putObject(bucket,key,file))(注意:key是图片所在的路 ...

  3. Android Studio build gradle project info 卡主不动解决方法.

    项目里的: build.gradle 依赖 的gradle 版本 在每个项目里 gradle/wrapper/properties/gradle-wrapper.properties 配置文件里 用户 ...

  4. Qt Widgets——抽象按钮及其继承类

    QAbstractButton是有关“按钮”的基类 描述了一个按钮应该具有的组成.它的公有函数如下: QAbstractButton(QWidget * parent = ) ~QAbstractBu ...

  5. Node.js概要

    Node.js是一个Javascript运行环境(runtime). Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好. Node.js是一个基于Chro ...

  6. Node.js编写be的流程(express)

    Node.js编写be的流程 1.当前项目目录下首先安装express 2.自动生成express插件结构 express -e 3.执行完前两步的效果      4.此时的package.json ...

  7. django+xadmin+djcelery实现后台管理定时任务

    继上一篇中间表的数据是动态的,图表展示的数据才比较准确.这里用到一个新的模块Djcelery,安装配置步骤如下: 1.安装 redis==2.10.6 celery==3.1.23 django-ce ...

  8. AdminLTE 文档

    一个基于 bootstrap 的轻量级后台模板,这个前端界面个人感觉很清爽,对于一个大后端的我来说,可以减少较多的时间去承担前端的工作但又必须去独立去完成一个后台系统开发的任务,并且,文档还算比较齐全 ...

  9. struts访问

    struts基本工程结构: 1. struts.xml支持语法提示;2. struts.xml配置常量, 用来覆盖struts.properties中的默认常量配置  一般情况下, 这个配置放在str ...

  10. bzoj4237

    题解: cdq分治 二位变成一维 二分一下 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ...