【题意】求数列中间项。

---这里可以扩展到数列第K项。

第一次做的时候直接排序水过了= =……这一次回头来学O(N)的快速选择算法。

快速选择算法基于快速排序的过程,每个阶段我们选择一个数为基准,并把区间划分成小于这个数和大于这个数的两个子区间,此时便可以判断这个数是不是第k大项,如果比K大,则去左区间找,否则去右区间找。

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. using namespace std;

  7. template

  8. doubleORint QuickSelect(doubleORint A[], int head, int tail, int k){

  9. int i = head, j = tail;

  10. doubleORint x = A[head];

  11. while(i x) j --;

  12. swap(A[i], A[j]);

  13. while(A[i] k){

  14. return QuickSelect(A, head, i-1, k);

  15. }

  16. else{

  17. return QuickSelect(A, i+1, tail, k - (i - head + 1));

  18. }

  19. }

  20. int a[10005];

  21. int main(){

  22. int n;

  23. scanf("%d", &n);

  24. for (int i = 0; i

  25. POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)的更多相关文章

      1. POJ 2388 Who's in the Middle(水~奇数个数排序求中位数)
      1. 题目链接:http://poj.org/problem?id=2388 题目大意: 奇数个数排序求中位数 解题思路:看代码吧! AC Code: #include<stdio.h> #in ...

      1. POJ 1442 Black Box treap求区间第k
      1. 题目来源:POJ 1442 Black Box 题意:输入xi 输出前xi个数的第i大的数 思路:试了下自己的treap模版 #include <cstdio> #include < ...

      1. poj 2388 Who's in the Middle
      1. 点击打开链接 Who's in the Middle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28324   Acce ...

      1. poj 2388 Who's in the Middle(快速排序求中位数)
      1. 一.Description FJ is surveying his herd to find the most average cow. He wants to know how much milk ...

      1. POJ 2182 Lost Cows (求序列第k大)
      1. 题解 二分+树状数组 显然最和一个数的值就是rank 那么其它数有什么规律? 从后往前匹配rank,我们可以发现第i个数的rank为还没有匹配的rank第(a[i]+1)大的数 这可以用 树状数组+二 ...

      1. POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
      1. 题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...

      1. poj 2388 insert sorting
      1. /** \brief poj 2388 insert sorting 2015 6 12 * * \param * \param * \return * */ #include <iostrea ...

      1. 【POJ】【2104】区间第K大
      1. 可持久化线段树 可持久化线段树是一种神奇的数据结构,它跟我们原来常用的线段树不同,它每次更新是不更改原来数据的,而是新开节点,维护它的历史版本,实现“可持久化”.(当然视情况也会有需要修改的时候) 可 ...

      1. 求一无序数组中第n大的数字 - 快速选择算法
      1. 逛别人博客的时候,偶然看到这一算法题,顺便用C++实现了一下. 最朴素的解法就是先对数组进行排序,返回第n个数即可.. 下面代码中用的是快速选择算法(不晓得这名字对不对) #include <v ...

    1.  
    2. 随机推荐

        1. 【BZOJ】【1391】【CEOI2008】order
        1. 网络流/最小割 暴力建图就好了……S->i 容量为收益,i->j+n 容量为租金,j+n->T容量为购买所花的钱. 如果亏钱的话那么割掉的就是收益,表示不赚钱. 如果租金大于购买所花 ...

        1. Unity3d 接入 移动MM支付SDK(2.3) 全攻略
        1. 原地址:http://blog.csdn.net/dingxiaowei2013/article/details/26842177 先将例程运行起来 下载例程(csdn积分不够上传不了,只能用百度网盘 ...

        1. 别让安全问题拖慢了 DevOps!
        1. DEVSECOPS 所面临的挑战 敏捷开发和 DevOps 方法的出现使软件开发的速度与质量都有所提升,但它们不经意地也为安全机构增压不少.从前的安全策略是基于静态数据的,而在产品上线前才应用这些策略 ...

        1. 初学tornado之MVC版helloworld
        1. 作者:the5fire | 标签: MVC  tornado  | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...

        1. C# 在vs2010中打开vs2012的项目(转)
        1. 在vs2010中打开vs2012的项目 今天在自己的电脑上装了vs2010然后要打开之前在vs2012上创建的sln文件 被提示-- 无法打开在新版本上创建的sln--解决方案--文件 其实vs201 ...

        1. Ubuntu环境下Nutch+Tomcat 搭建简单的搜索引擎
        1. 简易的搜索引擎搭建 我的配置: Nutch:1.2 Tomcat:7.0.57 1 Nutch设置 修改Nutch配置 1.1 修改conf/nutch-site.xml <?xml versi ...

        1. Thread的第四天学习
        1. 线程通信 wait notify synchronized + 同对象 才可 互斥 锁不是放在线程上的,放在共享资源内部的. wait 线程等待 notify 线程唤醒

        1. zend studio 10破解/汉化(转发)
        1. 转发:http://blog.csdn.net/qq1355541448/article/details/16807429 Zend Studio 10正式版破解及汉化 2013年03月12日 ⁄ P ...

        1. 【转】Windows平台SSH登录Linux并使用图形化界面
        1. 备注:经验证本文提供的方法可行且比使用VNC简洁一些.略有修改.   [日期:2011-09-06] 来源:Linux社区  作者:tianhuadihuo   http://www.linuxidc ...

        1. Linux Shell 数字计算与比较
        1. 直接上脚本, 使用$(())以及$[]进行数字计算 数值比较:n1 -eq n2检查n1是否等于n2         n1 -le n2检查n1是否小于等于n2n1 -ge n2检查n1是否大于等于n ...