//****************************************************************************************************
//
// 求n个数的中位数 - C++ - by Chimomo
//
// 对于一组有限个数的数据来说,它们的中位数是这种一种数:这群数据里的一半的数据比它大,而另外一半数据比它小。
// 计算有限个数的数据的中位数的方法是:把全部的同类数据依照大小的顺序排列。 假设数据的个数是奇数,则中间那个数据就是这群数据的中位数;假设数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。 //
//**************************************************************************************************** #include <iostream>
#include <cassert>
#include <stack>
#include <math.h> using namespace std ; int QuickSortOnce(int a[], int low, int high)
{
// 将首元素作为枢轴。
int pivot = a[low];
int i = low, j = high; while (i < j)
{
// 从右到左,寻找首个小于pivot的元素。 while (a[j] >= pivot && i < j)
{
j--;
} // 运行到此,j已指向从右端起首个小于或等于pivot的元素。 // 运行替换。
a[i] = a[j]; // 从左到右。寻找首个大于pivot的元素。
while (a[i] <= pivot && i < j)
{
i++;
} // 运行到此。i已指向从左端起首个大于或等于pivot的元素。
// 运行替换。
a[j] = a[i];
} // 退出while循环,运行至此,必然是i=j的情况。
// i(或j)指向的即是枢轴的位置。定位该趟排序的枢轴并将该位置返回。 a[i] = pivot; return i;
} void QuickSort(int a[], int low, int high)
{
if (low >= high)
{
return;
} int pivot = QuickSortOnce(a, low, high); // 对枢轴的左端进行排序。
QuickSort(a, low, pivot - 1); // 对枢轴的右端进行排序。
QuickSort(a, pivot + 1, high);
} int EvaluateMedian(int a[], int n)
{
QuickSort(a, 0, n - 1); if(n % 2 !=0)
{
return a[n / 2];
}
else
{
return (a[n / 2] + a[n / 2 - 1]) / 2;
}
} int main()
{
int a[9] = {-5, 345, 88, 203, 554, 1, 89, 909, 1001};
cout << EvaluateMedian(a, 9) << endl; return 0;
} // Output:
/*
203
*/

版权声明:本文博客原创文章,博客,未经同意,不得转载。

算法 - 乞讨n中位数(C++)的更多相关文章

  1. 查找第K小的数 BFPRT算法

    出处 http://blog.csdn.net/adong76/article/details/10071297 BFPRT算法是解决从n个数中选择第k大或第k小的数这个经典问题的著名算法,但很多人并 ...

  2. 快速排序以及第k小元素的线性选择算法

    简要介绍下快速排序的思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此 ...

  3. 算法搬运之BFPRT算法

    原文连接:http://noalgo.info/466.html BFPRT算法,又称为中位数的中位数算法,由5位大牛(Blum . Floyd . Pratt . Rivest . Tarjan)提 ...

  4. [算法]找到无序数组中最小的K个数

    题目: 给定一个无序的整型数组arr,找到其中最小的k个数. 方法一: 将数组排序,排序后的数组的前k个数就是最小的k个数. 时间复杂度:O(nlogn) 方法二: 时间复杂度:O(nlogk) 维护 ...

  5. BFPRT算法(求第K小的数字)

    BFPRT算法: 1.介绍: BFPRT算法又叫中位数的中位数算法,主要用于在无序数组中寻找第K大或第K小的数,它的最坏时间复杂度为O(n),它是由Blum,Floyd,Pratt,Rivest,Ta ...

  6. 5.查找最小的k个元素(数组)

    题目: 输入n个整数,输出其中最小的k个,例如输入1,2,3,4,5,6,7,8这8个数,则最小的4个是1,2,3,4(输出不要求有序) 解: 利用快速排序的partition,算导上求第k大数的思想 ...

  7. Lettcode Kth Largest Element in an Array

    Lettcode Kth Largest Element in an Array 题意:在无序数组中,寻找第k大的数字,注意这里考虑是重复的. 一直只会简单的O(nlogn)的做法,听说这题有O(n) ...

  8. LeetCode Day 2

    LeetCode0004 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...

  9. LeetCode Day 1

    目录 1.TwoSum 2.AddTwoNumbers 4.FindMedianSortedArrays 1.TwoSum 给定一个整数数组nums和一个目标值 target,请你在该数组中找出和为目 ...

随机推荐

  1. java与c/c++进行socket通信

    比如Server端只接收一个结构Employee,定义如下: struct UserInfo {   char UserName[20];   int UserId; }; struct Employ ...

  2. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...

  3. Linux mysql 数据库忘记root密码

    1.修改MySQL的登录设置: # vi /etc/my.cnf 1在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi. 2.重新启动mysqld # /etc/i ...

  4. 【c语言】模拟库函数strstr

    // 模拟库函数strstr #include <stdio.h> #include <assert.h> const char* my_strstr(const char * ...

  5. FusionCharts參数中文说明

    FushionCharts是把抽象数据图示化的套件,使用方便,配置简单.其相关參数中文说明例如以下. 功能特性 animation                    是否动画显示数据,默觉得 1( ...

  6. winfrom 倒计时控件

    最近在做一个快递柜项目,要求在用户没有操作的时间到了一分钟,自动返回主页,我于是封装了一个倒计时控件,废话少说,直接上代码 public partial class RemainingTimeUC : ...

  7. 安装ecshop提示“安装数据失败”或者“创建管理员帐号”

    解决方法: 在install/includes/init.php文件的顶部,<?php 下增加: date_default_timezone_set ('Asia/Shanghai'); 即可 ...

  8. JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)

    一.帐户激活   在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...

  9. 设计模式之迭代器模式(Iterator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  10. poj 3101 Astronomy(分数的最小公倍数)

    http://poj.org/problem? id=3101 大致题意:求n个运动周期不全然同样的天体在一条直线上的周期. 这题我是看解题报告写的,没想到选用參照物,用到了物理中的角速度什么的. 由 ...